分词器
(一)到 https://github.com/medcl/elasticsearch-analysis-ik 下载对应的版本(直接下载release版本,避免mvn打包),下载后是一个zip压缩包。
(二)将压缩包上传至elasticsearch 的安装目录下的plugins下,进行解压,运行如下
unzip elasticsearch-analysis-ik-5.5.2.zip #解压后文件夹名为elasticsearch
mv elasticsearch ik #将其改名为ik
(三)重启elasticsearch:./elasticsearch
(四)使用head插件(支持 ik_max_word 和ik_smart 两种分词)
数据模型
文档
语法
PUT/POST/GET/DELETE http://ip:端口/索引名称/类型/主键
Query的几种方式
(1)match_all:返回所有文档
GET stu/_search
{
"query": {
"match_all": {}
}
}
(2)match:布尔匹配查询:对查询字符串进行分词,根据分词结果构造布尔查询
GET stu/_search
{
"query": {
"match": {分词结果为john和kerry两个单词,
"name":"John Kerry"只要name字段值中包含有其中
}
任意一个,那么返回该文档
}
}
(4)match_phrase:短语匹配查询:对查询字符串进行分词,字段值必须依次匹配所有分词,注意各分词位置不能改变
GET stu/_search
{
"query": {
"match_phrase": {分词结果为john和kerry两个单词,
"name":"John Kerry"如果name字段值中依次包含所
}有分词,那么返回该文档
}
}
(5)match_phrase_prefix:短语前缀匹配查询:类似match_phrase,但最后一个分词作为前缀匹配
GET stu/_search
{
"query": {
"match_phrase_prefix": {
"name":"John Ke"最后一个分词作为前缀匹配
}
}
}
(6)multi_match:多字段匹配查询
GET stu/_search
{
"query": {
"multi_match": {
"query": "John like cooking",
"fields": ["name","interest"]
}
}
}
(7)term:词条查询,按照存储在倒排索引中的确切字词,对字段进行匹配
GET stu/_search
{
"query": {
"term":{
"name":"john"换成“John”试一试
}
}
}
(8)terms:多词条查询:按照存储在倒排索引中的确切字词,对字段进行多词条匹配
GET stu/_search
{
"query": {
"terms":{
"name":["john","da"]
}
}
}
(9)range:范围查询
GET stu/_search
{
"query": {
"range" : {
"yearOfBorn" : {
"gte" : 1995,
"lte" : 2000
}
}
}
}
(10)bool:布尔查询,查询喜欢“cooking”且不在1995-2000间出生的学生
GET stu/_search
{
"query": {
"bool": {
"must": {
"match": { "interest": "cooking"} },
"must_not": {
"range": { "yearOfBorn": { "gte": 1995, "lte": 2000 }}}
}
}
}
增
新增document
PUT news/new/6
{
"title":"title test",
"conent":"content test"
}
//PUT命令是http请求的一种方式,如果了解过restful api,对这个命令应该不陌生。除了我们大家熟悉的get,post,还有put,delete,head等。
news就是我们需要创建的索引,可以理解为数据库
new就是我们需要创建的type,可以理解为表
6就是文档的id,可以理解为一条记录的id
仔细看返回结果,先别看_shards,其它几个字段大家看了之后应该会立马明白。
_version,是elasticsearch里面用来控制版本冲突的,知道下就行,如果修改或者删除,_version的值都会+1。
删
DELETE /news/new/6
改
修改document
修改又分为全量修改和部分修改
全量修改用PUT,部分修改用POST
PUT news/new/6
{
"title":"title test"
}
//注意,如果用全量修改(PUT),就等于是删除之后再新建,所以可以部分修改
部分修改:
POST /news/new/6/_update
{
"doc":{
"title":"abcdefg"
}
}