ElasticSearch的RestAPI

type为text的字段才能够分词

RestAPI

查询所有索引

GET _cat/indices

查询索引movies的信息

GET movies

查询索引movies的字段相关信息

GET movies/_mapping

查询movies的部分数据

GET movies/_search

CRUD

;

/1表示ID,如果没有对应的ID,就增加数据,如果存在,则修改

POST user/_doc/1
{
  "age": 20,
  "firstName": "Roden",
  "lastName": "Jhson"
}

DELETE user/_doc/数据ID

修改原有的数据,或者给原有的数据添加字段

POST user/_update/1
{
  "doc": {
    "firstName":"Rodan",
    "lastName": "Johson",
    "addColunmn":"addInformation"
  }
}

查询单条数据

GET user/_doc/数据ID

批量查询

GET _mget
{
  "docs": [
    {"_index":"movies", "_id":"104372"},
   {"_index":"movies", "_id":"104374"}
  ]
}

分页查询

GET movies/_search
{
  "from": 0,
  "size": 20
}

批量插入

可以指定ID,也可以不指定ID

POST user/_bulk
{"index":{"_id": 23}}
{"firstName":"Will", "lastName":"Smith", "mobile": "123455"}
{"index":{}}
{"firstName":"Lily", "lastName":"Bob", "mobile": "98765"}

Request Body查询

  1. 以year的倒序排序,查询titile中包含有Beautiful或者Mind的数据, query只能单条件查询
GET movies/_search
{
  "sort": [
    {
      "year": {
        "order": "desc"
      }
    }
  ],
  # query中只能有一个条件
  "query": {
    "match": {
      "title": "Beautiful Mind"
    }
  }
}
  1. 短语匹配,查询title中包含有 “Beautiful Mind” 这个短语的的电影,只显示title和year的信息
GET movies/_search
{
  "query": {
    "match_phrase": {
      "title": "Beautiful Mind"
    }
  },
  "_source":["title","year"]
}
  1. 多条件查询,必须使用bool
  • must–>同时满足
GET movies/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "year": {
              "gte": 2017,
              "lte": 2018
            }
          }
        },
        {
          "match": {
            "title": "Beautiful Mind"
          }
        }
      ]
    }
  }
}

查询"title"包含"beautiful""mind"其中一个字段或者"year"在2016~2017年之间的数据

  • should–>满足其中一个
GET movies/_search
{
  "query":{
    "bool":{
      "should":[
        {
          "match":{
            "title":"Beautiful Mind"
          }
        },
        {
          "range":{
            "year":{
              "gte":2016,
              "lte":2017
            }
          }
        }
      ]
    }
  }
}
  1. query_string用法
    匹配title中含有"Beautiful Mind"
GET movies/_search
{
    "query":{
        "query_string":{
            "default_field": "title",
            "query": "Beautiful Mind",
            "default_operator": "AND"   #不加默认是OR
        }
    }
}

5.term实现精准匹配,查询title为Beautiful 的电影

GET movies/_search
{
  "query": {
    "term": {
      "title": {
        "value": "Beautiful"
      }
    }
  }
}
  1. 多字段同时匹配
GET movies/_search
{
    "query":{
        "multi_match":{
            "query":"beautiful mind Romance",
            "fields":["title","genre"],
            "type":"best_fields"
        }
    }
}

type值的三种取值:

- most_fields
- best_fields
- cross_fields
  • most_fields

most_fields,综合多个field一起进行搜索,尽可能多地让所有field的query参与到总分数的计算中来,此时就会是个大杂烩,结果不一定精准某一个document的一个field包含更多的关键字,但是因为其他document有更多field匹配到了,所以排在了前面;

优点:将尽可能匹配更多field的结果推送到最前面,整个排序结果是比较均匀的

缺点:可能那些精准匹配的结果,无法推送到最前面

  • best_fields
    best-fields策略,主要是说将某一个field匹配尽可能多的关键词的doc优先返回回来(获取最佳匹配的field)
  • cross_fields

总结

query下的关键字

range->范围
match->匹配
match_phrase->匹配短语
multi_match->多字段匹配
bool->多条件
query_string-->匹配多个单词
term->精准匹配

推荐搜索

suggest下的关键字

term
phrase
completion-->用于前缀查询(自动补全功能)
GET movies/_search
{
  "suggest":{
    #自定义名字
     "custom_name":{
     	#查询内容
	      "text":"life",
	      "term":{
	      "field":"title",
	      "suggest_mode":"always"
    	 }
    }
  }
}

suggest_mode的三种模式(只用term关键词才有)

  • missing,当词典中找不到对应的索引信息,才推荐
  • popular,会推荐频率高的类似的词,即使在词典中找得到索引信息
  • always,表示总是推荐

你可能感兴趣的:(ElastecSearch,elasticsearch)