`

Elasticsearch 控制相关度 (四) - 忽略TF/IDF

阅读更多

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

 

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

 

 

忽略TF/IDF

 

有时我们不需要TF/IDF。我们想知道的只是一个特定的单词是否出现在了字段中。比如我们正在搜索度假酒店,希望它拥有的卖点越多越好:

  • WiFi
  • 花园(Garden)
  • 泳池(Pool)

而关于度假酒店的文档类似下面这样:

{ "description": "A delightful four-bedroomed house with ... " }

可以使用一个简单的match查询:

GET /_search
{
  "query": {
    "match": {
      "description": "wifi garden pool"
    }
  }
}

然而,我们需要的并不是真正的全文搜索。此时TF/IDF只会碍手碍脚。我们不在意wifi是否是一个常见的词条,也不在意它在文档中出现的是否频繁。我们在意的只是它是否出现了。实际上,我们只是想通过卖点来对这些度假酒店进行排序 - 越多越好。如果拥有一个卖点,那么它的分值就是1,如果没有它的分值就是0。

constant_score查询

首先介绍constant_score查询。该查询能够包含一个查询或者一个过滤器,所有匹配文档的相关度分值都为1,不考虑TF/IDF:

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "constant_score": {
          "query": { "match": { "description": "wifi" }}
        }},
        { "constant_score": {
          "query": { "match": { "description": "garden" }}
        }},
        { "constant_score": {
          "query": { "match": { "description": "pool" }}
        }}
      ]
    }
  }
}

大概并不是所有的卖点都同等重要 - 其中的某些更有价值。如果最看中的卖点是泳池,那么我们可以对它进行相应提升:

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "constant_score": {
          "query": { "match": { "description": "wifi" }}
        }},
        { "constant_score": {
          "query": { "match": { "description": "garden" }}
        }},
        { "constant_score": {
          "boost":   2 
          "query": { "match": { "description": "pool" }}
        }}
      ]
    }
  }
}

NOTE

每个结果的最终分值并不是将所有匹配子句的分值累加而得到。Coordination因子查询归约因子(Query Normalization Factor)仍然会被考虑在内。

我们可以在度假酒店的文档中添加一个not_analyzed类型的features字段:

{ "features": [ "wifi", "pool", "garden" ] }

默认情况下,一个not_analyzed字段的字段长度归约(Field-length Norm)是被禁用的,同时其index_options也会被设置为docs,从而禁用词条频度(Term Frequencies),但是问题还是存在:每个词条的倒排文档频度(Inverse Document Frequency)仍然会被考虑。

仍然使用constant_score查询:

GET /_search
{
  "query": {
    "bool": {
      "should": [
        { "constant_score": {
          "query": { "match": { "features": "wifi" }}
        }},
        { "constant_score": {
          "query": { "match": { "features": "garden" }}
        }},
        { "constant_score": {
          "boost":   2
          "query": { "match": { "features": "pool" }}
        }}
      ]
    }
  }
}

实际上,每个卖点都应该被视为一个过滤器。度假酒店要么有该卖点,要么没有 - 使用过滤器似乎是更自然的选择。并且如果我们使用了过滤器,还可以得益于过滤器缓存这一功能。

不使用过滤器的根源在于:过滤器不会计算相关度分值。我们需要的是一座用来连接过滤器和查询的桥梁。而function_score查询就能够做到这一点,并且它也提供了更多的功能。

 

分享到:
评论

相关推荐

    elasticsearch IDF BM25函数图像

    es的排序准则的相关度,根据搜索 关键词 计算关键词在一个文档中的得分,得分越高结果越靠前。那么计算的准则是什么? 1. TF/IDF 2. BM25 > 这两种算法在这里我就先不做详细说明,看下图,两种算法的得分趋势图。TF/...

    Lucene全文检索引擎工具包 v7.7.3.tgz

    7. **分布式搜索**:随着数据量的增长,Lucene通过Solr或Elasticsearch等工具实现分布式搜索,将索引分散到多个节点,提升处理能力和响应速度。 8. **高级查询特性**:Lucene支持多种查询类型,如布尔查询、短语...

    Ruby-elman使用Elasticsearch全文搜索Linux手册页

    相关度评分基于TF-IDF(Term Frequency-Inverse Document Frequency)或其他算法;分页和排序则通过在查询语句中指定参数实现。 在实际使用中,用户可以通过命令行界面或者Web界面与Ruby-Elman互动。命令行界面可能...

    Elasticsearch 7 探索之路_131实用知识库分享

    Elasticsearch 的版本从 5.x 到 7.x, Lucene 6.x,性能提升,默认打分机制从 TF-IDF 改为 BM 25,支持 Ingest 节点、Completi 等。 5. Elasticsearch 的 CRUD 和批量操作 Elasticsearch 提供了文档的 CRUD(Create...

    ElasticSearch入门

    它使用TF-IDF算法进行相关性评分,帮助用户找到最相关的搜索结果。还可以使用`match`、`multi_match`、`query_string`等查询类型来定制搜索策略。 ### 5. 高级功能 - **聚合分析**:Elasticsearch 提供多种聚合...

    范力文-知乎搜索中的深度学习实践-脱敏.pdf

    - **2016年8月**:采用ElasticSearch作为搜索引擎的基础架构。 - **2018年4月**:引入Term Weighting机制以优化搜索结果的相关性和准确性。 - **2018年6月**:发布基于Rust语言开发的新一代搜索引擎,提高了性能和...

    人工智能-项目实践-检索系统-图书检索系统

    此外,可能还涉及到了相关性评分机制,如TF-IDF或BM25,以确保高相关度的图书优先展示。 新功能的开发可能是对现有系统的增强或扩展,比如添加模糊搜索功能,让用户在拼写错误的情况下仍能找到目标图书;或者引入...

    ES核心知识篇part2

    55.初识搜索引擎_相关度评分TF&IDF算法独家解密.avi将介绍搜索引擎如何评估文档的相关性,特别是TF-IDF算法,这是衡量一个词对于文档重要性的常见方法。36.分页搜索以及deep paging性能问题深度图解揭秘.avi探讨了...

    对JavaScript的全文搜索实现相关度评分的功能的方法

    综上所述,Okapi BM25算法在提高全文搜索相关度评分方面发挥了重要作用,通过对传统TF-IDF模型的改进,它能够为用户提供的搜索结果赋予更加合理的评分,使得最相关的文档能够被优先展示。而对于一个Web程序员来说,...

    yifanyang-search_recommend-master_Recommend_java_搜索推荐_

    3. **相关性评分**:ES的查询机制可以根据多个因素(如词频、位置、TF-IDF等)计算文档与查询的相关性,返回最相关的搜索结果。 4. **自定义分析器**:ES允许开发人员自定义分析器,以适应不同的文本处理需求,例如...

    搜索引擎Lucene_资料

    4. **搜索匹配**: Lucene通过倒排索引找到包含查询术语的文档,并计算每个文档的相关度分数,如TF-IDF(词频-逆文档频率)。 5. **结果排序**: 搜索结果根据相关度分数进行排序,高分文档优先展示。 6. **结果获取...

    search-framework-master.zip

    这通常通过相关度评分算法实现,如TF-IDF、BM25或LambdaMART。框架可能还会考虑其他因素,如点击率、时间戳等进行动态调整。 6. **实时更新**:为了保持搜索结果的时效性,框架需要具备实时或近实时的索引更新能力...

    lucenechapter

    - **评分机制**:通过TF-IDF等算法计算文档与查询的相关度,对搜索结果进行评分。 - **过滤器(Filter)**:如按时间、作者等条件过滤搜索结果。 - **高亮显示**:突出显示查询词在搜索结果中的位置,提高用户...

    IKAnalyzer中文分词计算句子相似度

    **IKAnalyzer中文分词** IKAnalyzer是一款开源的、基于Java实现的中文分词工具,它在中文...在处理大量中文文本时,理解并正确使用IKAnalyzer以及相关相似度计算技术,对于提升文本处理系统的效能和准确度至关重要。

    Open Source, Distributed, RESTful Search Engine.zip

    它采用了TF-IDF(Term Frequency-Inverse Document Frequency)算法进行相关性计算,能返回最相关的搜索结果。此外,还提供了分析器(Analyzer)功能,用于处理文本预处理,如分词、词干提取和停用词过滤,以优化...

Global site tag (gtag.js) - Google Analytics