分词器

(一)到 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 两种分词)

es不分词查询javaapi es查询所有分词器_字段

数据模型

es不分词查询javaapi es查询所有分词器_索引_02

文档

es不分词查询javaapi es查询所有分词器_elasticsearch_03


语法

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"
  }
}