ES 搜索6 (匹配查询)

匹配查询

匹配查询 match 是个 核心 查询。无论需要查询什么字段, match 查询都应该会是首选的查询方式。它是一个高级 全文查询 ,这表示它既能处理全文字段,又能处理精确字段。

这就是说, match 查询主要的应用场景就是进行全文搜索,我们以下面一个简单例子来说明全文搜索是如何工作的:

 

单个词查询

我们用第一个示例来解释使用 match 查询搜索全文字段中的单个词:

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

Elasticsearch 执行上面这个 match 查询的步骤是:

  1. 检查字段类型 。

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

  2. 分析查询字符串 。

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

  3. 查找匹配文档 。

    用 term 查询在倒排索引中查找 quick 然后获取一组包含该项的文档,本例的结果是文档:1、2 和 3 。

  4. 为每个文档评分 。

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

这个过程给我们以下(经缩减)结果:

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

文档 1 最相关,因为它的 title 字段更短,即 quick 占据内容的一大部分。

文档 3 比 文档 2 更具相关性,因为在文档 3 中 quick 出现了两次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的和背景 Elasticsearch是一个开源的分布式全文搜索引擎,可以支持各种类型的数据存储和检索。匹配查询是Elasticsearch中最常用的查询类型之一,它可以根据查询条件匹配数据集中的文档,并返回相关的结果。本次实验的目的是通过对Elasticsearch匹配查询的实验,了解其查询性能、精确度和召回率等指标,为后续的应用提供参考。 二、实验环境和工具 本次实验使用的环境和工具如下: - Elasticsearch版本:7.9.3 - Kibana版本:7.9.3 - 数据集:电影评论数据集 - 查询语句:"action" AND "thrilling" 三、实验步骤和结果 1. 创建索引 使用Kibana的Dev Tools创建索引,并指定字段类型和分词器: ``` PUT /movie_review { "mappings": { "properties": { "movie_title": { "type": "text", "analyzer": "standard" }, "review_text": { "type": "text", "analyzer": "english" } } } } ``` 2. 导入数据 使用Kibana的Dev Tools导入电影评论数据集: ``` POST /movie_review/_bulk { "index": { "_id": "1" }} { "movie_title": "Inception", "review_text": "This is an action-packed and thrilling movie." } { "index": { "_id": "2" }} { "movie_title": "The Dark Knight", "review_text": "This is another action-packed and thrilling movie." } { "index": { "_id": "3" }} { "movie_title": "Interstellar", "review_text": "This is a sci-fi movie with some action and thrilling moments." } ``` 3. 执行查询 使用Kibana的Dev Tools执行查询语句: ``` GET /movie_review/_search { "query": { "match": { "review_text": { "query": "action AND thrilling" } } } } ``` 4. 实验结果 查询结果如下所示: ``` { "took" : 13, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 3, "relation" : "eq" }, "max_score" : 0.6931472, "hits" : [ { "_index" : "movie_review", "_type" : "_doc", "_id" : "2", "_score" : 0.6931472, "_source" : { "movie_title" : "The Dark Knight", "review_text" : "This is another action-packed and thrilling movie." } }, { "_index" : "movie_review", "_type" : "_doc", "_id" : "1", "_score" : 0.57735026, "_source" : { "movie_title" : "Inception", "review_text" : "This is an action-packed and thrilling movie." } }, { "_index" : "movie_review", "_type" : "_doc", "_id" : "3", "_score" : 0.2876821, "_source" : { "movie_title" : "Interstellar", "review_text" : "This is a sci-fi movie with some action and thrilling moments." } } ] } } ``` 查询结果共返回了三个文档,其中第二个文档的匹配度最高,得分为0.6931472。 四、实验分析和总结 通过本次实验,我们可以得出以下结论: 1. Elasticsearch的匹配查询功能可以根据查询条件匹配数据集中的文档,并返回相关的结果。 2. 分词器的选择对查询结果有很大的影响,不同的分词器会对文本进行不同的分词处理。 3. 查询性能受到多方面的因素影响,包括索引的大小、查询条件的复杂度等。 4. 精确度和召回率是衡量匹配查询效果的重要指标,需要针对具体的应用场景进行评估。 综上所述,Elasticsearch匹配查询是一个非常强大的功能,可以帮助我们快速地检索和分析大量的文本数据。在实际应用中,我们需要根据具体的需求来选择合适的分词器和查询语句,以达到最优的查询效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值