Skip to content

倒排索引

Master选举

写入原理

ES支持的查询类型

按语言划分

  • Query DSL:Domain Specific Language
  • Script:脚本查询
  • Aggregations:聚合查询
  • SQL查询
  • EQL查询

按场景划分

  • Query String

    shell
      # 查询所有:
      GET /product/_search
      # 带参数:
      GET /product/_search?q=name:xiaomi
      # 分页:
      GET /product/_search?from=0&size=2&sort=price:asc
      # 精准匹配 exact value
      GET /product/_search?q=date:2021-06-01
      # _all搜索 相当于在所有有索引的字段中检索
      GET /product/_search?q=2021-06-01
  • 全文检索-Fulltext query

    shell
      match:匹配包含某个term的子句
    
      match_all:匹配所有结果的子句
      
      multi_match:多字段条件
      
      match_phrase:短语查询
  • 精准查询-Term query

    shell
    term:匹配和搜索词项完全相等的结果
    terms:匹配和搜索词项列表中任意项匹配的结果
    range:范围查找
    
    term match_phrase 区别:
      match_phrase 会将检索关键词分词, 
      match_phrase的分词结果必须在被检索字段的分词中都包含,而且顺序必须相同,而且默认必须都是连续的
      term搜索不会将搜索词分词
    term keyword 区别
      term是对于搜索词不分词,
      keyword是字段类型,是对于source data中的字段值不分词
  • 过滤器-Filter

    filter:query和filter的主要区别在: filter是结果导向的而query是过程导向。query倾向于“当前文档和查询的语句的相关度”而filter倾向于“当前文档和查询的条件是不是相符”。即在查询过程中,query是要对查询的每个结果计算相关性得分的,而filter不会。另外filter有相应的缓存机制,可以提高查询效率。

  • 组合查询-Bool query

    • bool:可以组合多个查询条件,bool查询也是采用more_matches_is_better的机制,因此满足must和should子句的文档将会合并起来计算分值
    • must:必须满足子句(查询)必须出现在匹配的文档中,并将有助于得分。
    • filter:过滤器 不计算相关度分数,cache☆子句(查询)必须出现在匹配的文档中。但是不像 must查询的分数将被忽略。Filter子句在filter上下文中执行,这意味着计分被忽略,并且子句被考虑用于缓存。
    • should:可能满足 or子句(查询)应出现在匹配的文档中。
    • must_not:必须不满足 不计算相关度分数 not子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着计分被忽略,并且子句被视为用于缓存。由于忽略计分,0因此将返回所有文档的分数。
    • minimum_should_match:参数指定should返回的文档必须匹配的子句的数量或百分比。如果bool查询包含至少一个should子句,而没有must或 filter子句,则默认值为1。否则,默认值为0
  • 地理位置搜索

    • Geo_point
    • Geo_shape
  • 嵌套查询

    • Object
    • Nested
    • Join

按数据类型(准确度)划分

  • 全文检索:match、match_phrase
  • 精确查找:term、terms
  • 模糊查询:suggester、模糊查询、通配符、正则查找