Elasticsearch权威指南:深入理解match查询

Elasticsearch权威指南:深入理解match查询

elasticsearch-definitive-guide The Definitive Guide to Elasticsearch elasticsearch-definitive-guide 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-definitive-guide

什么是match查询

match查询是Elasticsearch中最基础、最常用的全文检索查询方式。作为高级全文查询,它能够智能地处理全文字段和精确值字段,是开发者进行搜索时的首选工具。

准备工作:建立测试索引

在深入探讨match查询前,我们先建立一个测试环境:

DELETE /my_index

PUT /my_index
{ "settings": { "number_of_shards": 1 }}

POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }

这里我们特意将索引设置为单分片,这是为了避免分布式环境下相关性评分计算可能出现的偏差问题。

单字查询原理剖析

让我们从一个简单的单字查询开始:

GET /my_index/my_type/_search
{
    "query": {
        "match": {
            "title": "QUICK!"
        }
    }
}

这个查询的执行过程可以分为四个关键步骤:

  1. 字段类型检查:系统首先确认title字段是已分析(analyzed)的字符串字段
  2. 查询词分析:查询词"QUICK!"经过标准分析器处理后变为"quick"
  3. 匹配文档查找:在倒排索引中查找包含"quick"的文档(文档1、2、3)
  4. 相关性评分:基于TF-IDF算法计算每个文档的相关性得分

相关性评分详解

查询结果中,文档的排序不是随机的,而是基于精密的评分算法:

"hits": [
 {
    "_id":      "1",
    "_score":   0.5,
    "_source": {
       "title": "The quick brown fox"
    }
 },
 {
    "_id":      "3",
    "_score":   0.44194174,
    "_source": {
       "title": "The quick brown fox jumps over the quick dog"
    }
 },
 {
    "_id":      "2",
    "_score":   0.3125,
    "_source": {
       "title": "The quick brown fox jumps over the lazy dog"
    }
 }
]

评分结果说明:

  • 文档1得分最高,因为其title字段最短,"quick"在内容中占比最大
  • 文档3比文档2得分高,因为"quick"出现了两次
  • 文档2虽然包含"quick",但由于字段较长且"quick"只出现一次,得分最低

技术要点总结

  1. 分析过程:match查询会对查询词进行与字段相同的分析处理
  2. 查询转换:单字查询实际上会被转换为term查询执行
  3. 评分因素:相关性评分考虑三个关键因素:
    • 词频(TF):词项在文档中出现的频率
    • 逆文档频率(IDF):词项在整个索引中的稀有程度
    • 字段长度:较短的字段权重更高

理解match查询的工作原理对于构建高效的搜索应用至关重要。它是Elasticsearch全文检索的基础,后续更复杂的查询大多都是在此基础上构建的。

elasticsearch-definitive-guide The Definitive Guide to Elasticsearch elasticsearch-definitive-guide 项目地址: https://gitcode.com/gh_mirrors/el/elasticsearch-definitive-guide

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农鸽望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值