DSL全文搜索

match类型

GET /test-dsl-match/_search
{
    "query": {
        "match": {
            "title": "QUICK!"
        }
    }
}

elasticsearch执行上面match的步骤是:

  1. 检查字段类型

标题title字段是一个string类型(analyzed)已分析的全文字段,这以为着查询字符串本身也应该被分析。

  1. 分析查询字符串

讲查询的字符串QUICK!传入到标准分析器中,输出的结果是单个项quick,因为只有一个单子项,所以match查询执行的是单个底层term查询。

  1. 查找匹配文档

用term查询在倒排索引中查找quick然后获取一组包含该项的文档,

  1. 为每个文档评分

用 term 查询计算每个文档相关度评分 _score ,这是种将词频(term frequency,即词 quick 在相关文档的 title 字段中出现的频率)和反向文档频率(inverse document frequency,即词 quick 在所有文档的 title 字段中出现的频率),以及字段的长度(即字段越短相关度越高)相结合的计算方式。

match多词查询

match多个子的本质是其内部会先后执行多次term查询,然后将查询的结果合并作为最终结果输出。为了做到这一点,它将多个term包入一个bool查询中。

参考

https://pdai.tech/md/db/nosql-es/elasticsearch-x-dsl-full-text.html