`

Elasticsearch 控制相关度 (三) - 通过查询结构调整相关度以及boosting查询

阅读更多

原文链接:http://blog.csdn.net/dm_vincent/article/details/42134905

 

本章翻译自Elasticsearch官方指南的Controlling Relevance一章。

 

 

通过查询结构调整相关度

 

ES提供的查询DSL是相当灵活的。你可以通过将单独的查询子句在查询层次中上下移动来让它更重要/更不重要。比如,下面的查询:

quick OR brown OR red OR fox

我们可以使用一个bool查询,对所有词条一视同仁:

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "text": "quick" }},
        { "term": { "text": "brown" }},
        { "term": { "text": "red"   }},
        { "term": { "text": "fox"   }}
      ]
    }
  }
}

但是这个查询会给一份含有quick,red及brown的文档和一份含有quick,red及fox的文档完全相同的分数,然而在合并查询(Combining Queries)中,我们知道bool查询不仅能够决定一份文档是否匹配,同时也能够知道该文档的匹配程度。

下面是更好的查询方式:

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "text": "quick" }},
        { "term": { "text": "fox"   }},
        {
          "bool": {
            "should": [
              { "term": { "text": "brown" }},
              { "term": { "text": "red"   }}
            ]
          }
        }
      ]
    }
  }
}

现在,red和brown会在同一层次上相互竞争,而quick,fox以及red或者brown则是在顶层上相互对象的词条。

我们已经讨论了match,multi_match,term,book以及dis_max是如何对相关度分值进行操作的。在本章的剩余部分,我们会讨论和相关度分值有关的另外三种查询:boosting查询,constant_score查询以及function_score查询。

 

 

不完全的不(Not Quite Not)

 

在互联网上搜索"苹果"也许会返回关于公司,水果或者各种食谱的结果。我们可以通过排除pie,tart,crumble和tree这类单词,结合bool查询中的must_not子句,将结果范围缩小到只剩苹果公司:

GET /_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "text": "apple"
        }
      },
      "must_not": {
        "match": {
          "text": "pie tart fruit crumble tree"
        }
      }
    }
  }
}

但是有谁敢说排除了tree或者crumble不会将一份原本和苹果公司非常相关的文档也排除在外了呢?有时,must_not过于严格了。

boosting查询

boosting查询能够解决这个问题。它允许我们仍然将水果或者食谱相关的文档考虑在内,只是会降低它们的相关度 - 将它们的排序更靠后:

GET /_search
{
  "query": {
    "boosting": {
      "positive": {
        "match": {
          "text": "apple"
        }
      },
      "negative": {
        "match": {
          "text": "pie tart fruit crumble tree"
        }
      },
      "negative_boost": 0.5
    }
  }
}

它接受一个positive查询和一个negative查询。只有匹配了positive查询的文档才会被包含到结果集中,但是同时匹配了negative查询的文档会被降低其相关度,通过将文档原本的_score和negative_boost参数进行相乘来得到新的_score。

因此,negative_boost参数必须小于1.0。在上面的例子中,任何包含了指定负面词条的文档的_score都会是其原本_score的一半。

分享到:
评论

相关推荐

    elasticsearch-analysis-dynamic-synonym-7.6.2

    总的来说,`elasticsearch-analysis-dynamic-synonym-7.6.2`插件是ES7.6.2版本中实现动态同义词功能的重要工具,它通过高效的数据处理和灵活的API,让同义词管理变得更加便捷,极大地提升了ES在实际业务中的应用效果...

    elasticsearch-analysis-pinyin-7.4.0 es拼音分词器7.4.0

    因此,理解并合理利用Elasticsearch的索引策略、分片和副本设置,以及查询优化技术,对于提升整体性能至关重要。 总的来说,elasticsearch-analysis-pinyin-7.4.0为Elasticsearch带来了强大的中文拼音分词功能,极...

    elasticsearch-analysis-ik-7.10.0.zip下载

    用户在下载并解压此文件后,可以将其安装到Elasticsearch环境中,以增强对中文文档的索引和查询性能。 压缩包中的各个文件如下: 1. httpclient-4.5.2.jar:这是Apache HttpClient库的一个版本,用于实现HTTP协议...

    最新版 elasticsearch-analysis-ik-8.7.0.zip

    最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip

    ES同义词插件 elasticsearch-analysis-dynamic-synonym-6.5.1.rar

    在IT领域,尤其是在搜索引擎优化和大数据分析中,Elasticsearch(ES)是一个广泛使用的开源全文检索引擎。它基于Lucene库,提供了分布式、实时、高可用性以及容错能力的数据存储和搜索解决方案。本篇文章将重点讲解...

    elasticsearch-analysis-dynamic-synonym-7.0.0.zip

    Elasticsearch是一个强大的开源搜索引擎,广泛应用于数据存储和分析领域。为了增强其对文本的处理能力,特别是中文分词和语义理解,开发者通常会利用各种插件来扩展其功能。"elasticsearch-analysis-dynamic-synonym...

    elasticsearch-analysis-ik-7.16.2.zip

    本文将深入探讨Elasticsearch的IK分词器,即elasticsearch-analysis-ik-7.16.2,以及与其相关的依赖库。 **一、elasticsearch-analysis-ik-7.16.2概述** elasticsearch-analysis-ik是针对Elasticsearch的中文分词...

    elasticsearch-analysis-ik-7.10.2.zip

    Elasticsearch(ES)作为一个开源的全文搜索引擎,因其强大的搜索功能和分布式特性而备受青睐。然而,对于中文这种复杂的语言,分词是搜索引擎理解文本的关键步骤。本文将详细介绍elasticsearch-analysis-ik-7.10.2...

    最新版elasticsearch-analysis-ik-8.8.2.zip

    最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip最新版elasticsearch-analysis-ik-8.8.2.zip

    最新版 elasticsearch-analysis-ik-7.6.2.zip

    "elasticsearch-analysis-ik-7.6.2.zip" 是针对Elasticsearch 7.6.2版本的一个专门用于中文分词的插件,其目的是优化对中文文本的索引和查询性能。 IK分析器是Elasticsearch社区中非常流行的一个中文分词插件,由...

    elasticsearch-analysis-ik-7.16.3.zip

    在现代大数据分析和搜索引擎领域,Elasticsearch(ES)因其高效、灵活的全文检索能力而备受青睐。然而,对于中文这样的多字节语言,如何准确地进行分词是关键。这时,我们就需要引入专门的中文分词器。本文将详细...

    最新版windows elasticsearch-8.8.0-windows-x86-64.zip

    最新版windows elasticsearch-8.8.0-windows-x86_64.zip最新版windows elasticsearch-8.8.0-windows-x86_64.zip最新版windows elasticsearch-8.8.0-windows-x86_64.zip

    elasticsearch-head-chrome-master.zip

    虽然 Elasticsearch Head 很方便,但应注意不要在生产环境中过度依赖它,因为浏览器插件可能不提供高级的安全控制。在处理敏感数据时,建议使用更安全的管理工具,并确保 Elasticsearch 配置有适当的认证和授权机制...

    elasticsearch-analysis-dynamic-synonym-7.12.1.zip

    标签 "elasticsearch elasticsearch" 强调了这个资源与Elasticsearch紧密相关,涵盖了Elasticsearch的核心技术和应用。 从压缩包内的文件名称列表来看,我们可以推断出以下几个关键知识点: 1. **mysql-connector-...

    elasticsearch-analysis-ik-8.2.0.zip

    本文将深入探讨这个分词器的特性和使用方法,并结合相关标签,如“elasticsearch”、“综合资源”、“大数据”、“big data”以及“搜索引擎”,解析其在大数据环境中的重要角色。 一、elasticsearch-analysis-ik ...

    elasticsearch-bulk-insert-plugin-8.2.0.0-342.zip

    这意味着对于Elasticsearch 7.x的新特性或接口变动,用户需要第三方插件如elasticsearch-bulk-insert-plugin来确保数据导入的顺利进行。 标签"Es7的插"进一步强调了这个插件是专为Elasticsearch 7.x设计的,因此它...

    elasticsearch-analysis-ik-7.8.1.zip

    本文将深入探讨 "elasticsearch-analysis-ik-7.8.1.zip" 这一版本的 IK 分词器,以及与其相关的依赖库。 首先,"elasticsearch-analysis-ik-7.8.1.zip" 是一个针对 Elasticsearch 7.8.1 版本定制的 IK 分词器插件包...

    elasticsearch-analysis-ik-7.3.2.zip

    本文将深入探讨"elasticsearch-analysis-ik-7.3.2"这个版本,以及与其相关的技术细节。 首先,"elasticsearch-analysis-ik-7.3.2"是IK分词器的最新版本,发布于2019年9月15日。此版本针对Elasticsearch 7.3.2进行了...

    elasticsearch-bulk-insert-plugin.zip

    Elasticsearch-Bulk-Insert-Plugin 是一个专为Kettle设计的插件,主要用于高效地将大量数据批量插入到Elasticsearch(ES)集群中。Elasticsearch是一种流行且功能强大的分布式搜索引擎,常用于大数据分析、日志分析...

    elasticsearch-analysis-ik-7.8.0-c.zip

    最新版 elasticsearch-analysis-ik-7.8.0最新版 elasticsearch-analysis-ik-7.8.0最新版 elasticsearch-analysis-ik-7.8.0

Global site tag (gtag.js) - Google Analytics