Elasticsearch学习之深入搜索一 --- 提高查询的精准度

本文深入探讨了Elasticsearch的高级搜索技巧,包括如何使用match query、bool query以及and operator和minimum_should_match参数来精准控制搜索结果。通过实例演示了如何组合多个搜索条件,以提高搜索的相关性和精确度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 为帖子增加标题字段
POST /forum/article/_bulk
{ "update": { "_id": "1"} }
{ "doc" : {"title" : "this is java and elasticsearch blog"} }
{ "update": { "_id": "2"} }
{ "doc" : {"title" : "this is java blog"} }
{ "update": { "_id": "3"} }
{ "doc" : {"title" : "this is elasticsearch blog"} }
{ "update": { "_id": "4"} }
{ "doc" : {"title" : "this is java, elasticsearch, hadoop blog"} }
{ "update": { "_id": "5"} }
{ "doc" : {"title" : "this is spark blog"} }
  1. 搜索标题中包含java或elasticsearch的blog

match query,是负责进行全文检索的。当然,如果要检索的field,是not_analyzed类型的,那么match query也相当于term query。

GET /forum/article/_search
{
    "query": {
        "match": {
            "title": "java elasticsearch"
        }
    }
}
  1. 搜索标题中包含java和elasticsearch的blog

搜索结果精准控制的第一步:灵活使用and关键字,如果你是希望所有的搜索关键字都要匹配的,那么就用and,可以实现单纯match query无法实现的效果

GET /forum/article/_search
{
    "query": {
        "match": {
            "title": {
        "query": "java elasticsearch",
        "operator": "and"
           }
        }
    }
}
  1. 搜索包含java,elasticsearch,spark,hadoop,4个关键字中,至少3个的blog

控制搜索结果的精准度的第二步:指定一些关键字中,必须至少匹配其中的多少个关键字,才能作为结果返回

GET /forum/article/_search
{
  "query": {
    "match": {
      "title": {
        "query": "java elasticsearch spark hadoop",
        "minimum_should_match": "75%"
      }
    }
  }
}
  1. 用bool组合多个搜索条件,来搜索title
GET /forum/article/_search
{
  "query": {
    "bool": {
      "must":     { "match": { "title": "java" }},
      "must_not": { "match": { "title": "spark"  }},
      "should": [
                  { "match": { "title": "hadoop" }},
                  { "match": { "title": "elasticsearch"   }}
      ]
    }
  }
}
  1. bool组合多个搜索条件,如何计算relevance score

must和should搜索对应的分数,加起来,除以must和should的总数

排名第一:java,同时包含should中所有的关键字,hadoop,elasticsearch
排名第二:java,同时包含should中的elasticsearch
排名第三:java,不包含should中的任何关键字

should是可以影响相关度分数的,must是确保说,谁必须有这个关键字,同时会根据这个must的条件去计算出document对这个搜索条件的relevance score,在满足must的基础之上,should中的条件,不匹配也可以,但是如果匹配的更多,那么document的relevance score就会更高

  1. 搜索java,hadoop,spark,elasticsearch,至少包含其中3个关键字

默认情况下,should是可以不匹配任何一个的,比如上面的搜索中,this is java blog,就不匹配任何一个should条件,但是有个例外的情况,如果没有must的话,那么should中必须至少匹配一个才可以,比如下面的搜索,should中有4个条件,默认情况下,只要满足其中一个条件,就可以匹配作为结果返回,但是可以精准控制,should的4个条件中,至少匹配几个才能作为结果返回

GET /forum/article/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "title": "java" }},
        { "match": { "title": "elasticsearch"   }},
        { "match": { "title": "hadoop"   }},
        { "match": { "title": "spark"   }}
      ],
      "minimum_should_match": 3 
    }
  }
}

(1) 全文检索的时候,进行多个值的检索,有两种做法,match query;should
(2) 控制搜索结果精准度:and operator,minimum_should_match

在大数据处理和分析中,能够实现精准且高效的相关性匹配至关重要。为了深入了解和掌握这技能,建议参考《Elasticsearch核心技术解析:搜索与分析的高效引擎》这资源。它详细阐述了Elasticsearch的基本概念、操作和最佳实践,对于想要提升搜索能力的开发者尤为有益。 参考资源链接:[Elasticsearch核心技术解析:搜索与分析的高效引擎](https://wenku.youkuaiyun.com/doc/xsjz0xeos2) Elasticsearch中的相关性匹配是通过Query DSL(Domain Specific Language)来实现的,它允许用户构建复杂的查询。例如,可以使用bool查询来组合多个查询条件,或者利用function_score查询通过特定的函数来调整文档的相关性得分。下面是个bool查询的示例,展示了如何使用must和should子句实现复杂的匹配逻辑: (此处省略具体代码示例) 在上述示例中,通过must子句要求文档同时满足两个条件,而should子句则为匹配结果增加灵活性,提高相关性评分。通过精心设计查询语句,可以确保返回的搜索结果与用户意图高度匹配。 掌握了这些技术后,你将能够有效地利用Elasticsearch进行复杂的搜索和分析。为了更全面地学习和掌握Elasticsearch搜索与分析技术,建议深入学习Elasticsearch核心技术解析:搜索与分析的高效引擎》中的内容。这份资源不仅仅提供了基础概念的讲解,还包括了实战操作和最佳实践,是成为Elasticsearch专家不可或缺的参考资料。 参考资源链接:[Elasticsearch核心技术解析:搜索与分析的高效引擎](https://wenku.youkuaiyun.com/doc/xsjz0xeos2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值