Elasticsearch 基础教程

Elasticsearch 高级教程

Elasticsearch 插件

Elasticsearch 笔记

Elasticsearch FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/elasticsearch-query-match-phrase.html

Elasticsearch match_phrase 查询

Elasticsearch(es) 查询语句语法详解 Elasticsearch(es) 查询语句语法详解


elasticsearch 的 match_phrase 查询是全文查询,主要用于需要的 query 词的顺序与全文匹配中的顺序一致,这是基于 lucene 索引中存储的 term 在 doc 中出现的 position 信息来判断的。

match_phrase 首先会把 query 内容分词,分词器可以自定义,同时文档还要满足以下两个条件才会被搜索到,一是分词后所有词项都要出现在指定字段中,二是字段中的词项顺序要一致。match_phrase 查询的底层实现是 span query,span query 一般不常用。

查询语法结构

GET /_search
{
  "query": {
    "match_phrase": {
      "field_name": {
        "query": "query string",
        "slop": 2,
        "boost": 10.0,
        "analyzer": "my_analyzer"
      }
    }
  }
}

match_phrase 查询同样可写成一种类型为 phrase 的 match 查询:

GET /_search
{
  "query": {
    "match": {
      "field_name": {
        "query": "query string",
        "type": "phrase"
      }
    }
  }
}

参数

field_name

这里的 field_name 是替换描述词,不是实际的词,指定要匹配的字段名称。需要注意的是,如果只指定需要查询的 query 文本,field_name 对应的要查询的文本即可,如下:

GET /_search
{
  "query": {
    "match_phrase": {
      "field_name": "query string"
    }
  }
}

query

需要查询的 query 文本,如上语法结构,它属于 field_name 对应的对象里。

slot

match_phrase 是精确匹配,默认(slot 为 0)时,要求分词后所有词项与 doc 中出现的相对顺序位置一样。

当然使用 slot 可以将精确匹配的条件放宽,slot 的意义是需要移动一个 term 多少次才能使得 query 跟 doc 完全匹配,主要有两种情况,一是缺失某些 term,二是 term 一致,但是顺序不一致,都需要 slot 来控制。需要注意的是,两个 term 交换位置,slot=2。

boost

对应查询项的加权值。

analyzer

指定当前 query 所对应的分词分析器(需要当前 elasticsearch 支持)。

应用场景

match_phrase 查询主要的应用场景如下:

  • 对匹配项的前后顺序有要求的 case,如检索专利号等。
elasticsearch 的 multi_match 查询为能在多个字段上反复执行相同查询提供了一种便捷方式,是基于 match 查询用于 ...
我们知道 es 中 multi_match 是多字段的 match 匹配模式,且默认情况下,计算分是采用 best_fields 模式,但如 ...
Elasticsearch的最多使用的场景就是用它的查询API,它提供完备的查询功能以满足现实中的各种需求。如果请求中潜在的分片数量很大,则 ...
Elasticsearch function_score 查询是可以自定义评分函数的方式进行打分,它允许为每个与主查询匹配的文档应用一个函数 ...
Elasticsearch是一个开源的分布式搜索和分析引擎,它提供了强大的聚合功能,用于分析和汇总数据。示例代码:这些示例代码展示了一些常用 ...