Skip to content

ElasticSearch第七篇 查询条件

yangyp8110 edited this page Jan 17, 2018 · 1 revision

空搜索:

curl -XGET http://{host:port}/_search

多索引、多类型:

  • http://{host:port}/_search

    在所有的索引中搜索所有的类型

  • http://{host:port}/gb/_search

    在 gb 索引中搜索所有的类型

  • http://{host:port}/gb,user/_search

    在 gb 和 user 索引中搜索所有的文档

  • http://{host:port}/g*,u*/_search

    在任何以 g 或者 u 开头的索引中搜索所有的类型

  • http://{host:port}/gb/user/_search

    在 gb 索引中搜索 user 类型

  • http://{host:port}/gb,us/user,tweet/_search

    在 gb 和 us 索引中搜索 user 和 tweet 类型

  • http://{host:port}/_all/user,tweet/_search

    在所有的索引中搜索 user 和 tweet 类型

查询关键字

  • match_all

    查询简单的 匹配所有文档。在没有指定查询方式时,它是默认的查询

  • match

    标准查询,如果在一个全文字段上使用 match 查询,在执行查询前,它将用正确的分析器去分析查询字符串;如果在一个精确值的字段上使用它, 例如数字、日期、布尔或者一个 not_analyzed 字符串字段,那么它将会精确匹配给定的值

  • multi_match

    查询可以在多个字段上执行相同的 match 查询

  • range

    查询找出那些落在指定区间内的数字或者时间 eg : {"range":{"age":{"gte":20,"lt":30}}} 被允许的操作符如下:

    • gt 大于
    • gte 大于等于
    • lt 小于
    • lte 小于等于
  • term

    查询被用于精确值 匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed 的字符串

  • terms

    查询和 term 查询一样,但它允许你指定多值进行匹配。如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件

  • exists

    查询被用于查找那些指定字段中有值 (exists) 的文档

  • missing

    查询被用于查找那些指定字段中无值 (missing) 的文档

  • bool 查询

    must

    • 文档 必须 匹配这些条件才能被包含进来。

    must_not

    • 文档 必须不 匹配这些条件才能被包含进来。

    should

    • 如果满足这些语句中的任意语句,将增加 _score ,否则,无任何影响。它们主要用于修正每个文档的相关性得分。

    filter

    • 必须 匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

将查询移到 bool 查询的 filter 语句中,这样它就自动的转成一个不评分的 filter 了。所有查询都可以借鉴这种方式。

验证查询

  • validate-query API 可以用来验证查询是否合法
GET http://{host:port}/{index}/{type}/_validate/query
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}
  • 可以将 explain 参数 加到查询字符串中,不合法的查询验证会返回不合法的原因;对于合法查询,使用 explain 参数将返回可读的描述。
GET http://{host:port}/{index}/{type}/_validate/query?explain
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}
Clone this wiki locally