gpt4 book ai didi

elasticsearch - Elasticsearch-查询具有不同术语的主要和次要属性

转载 作者:行者123 更新时间:2023-12-03 01:38:59 25 4
gpt4 key购买 nike

我正在使用Elasticsearch查询最初从具有很多冗余的几个关系数据库中导出的数据。现在,我要在具有主属性和一个或多个应匹配的辅助属性的地方执行查询。我尝试使用带有必须项和应该项的 bool(boolean) 查询,但是这似乎不适用于我的情况,可能看起来像这样:

例:

我有一个用户的fullnamestreet name的文档,我想搜索其他索引中的相似用户。因此,我的查询的最佳匹配应该是fullname上的最佳匹配和streetname字段上的最佳匹配。但是由于原始数据存在很多冗余和不一致之处,因此fullname字段(我是从name1,name2,name3字段中手动创建的)可能多次包含相同的名称,并且似乎Elasticsearch在必填字段中将double匹配列为更高的名称比应属性中的匹配项。

这意味着,我想使用以下示例数据查询John Doe Back Street:

{
"fullname" : "John Doe John and Jane",
"street" : "Main Street"

}
{
"fullname" : "John Doe",
"street" : "Back Street"

}

长话短说,我想查询一个主要属性 fullname - John Doe和次要属性 street - Back Street,并希望第二个文档最匹配,而不是第一个文档,因为它多次包含 John

最佳答案

在Elasticsearch中操纵相关性不是最容易的部分。分数计算基于三个主要部分:

  • 词频
  • 反文档频率
  • 字段长度范数

  • 不久:
  • 这个词经常出现在现场,更多相关的是
  • 该术语经常出现在整个索引中,与LESS相关的是
  • 期限越长,与
  • 相关的更多

    我建议您阅读以下 Material :
  • What Is Relevance?
  • Theory Behind Relevance Scoring
  • Controlling Relevance和子页面

  • 如果通常,对于您而言, fullname的结果比 street的结果更重要,则可以提高第一个结果的重要性。下面有基于我的工作代码的示例代码:
    {
    "query": {
    "multi_match": {
    "query": "john doe",
    "fields": [
    "fullname^10",
    "street"
    ]
    }
    }
    }

    在此示例中, fullname的结果比 ^10的结果重要十倍( street)。您可以尝试操纵提升或使用其他方式来控制相关性,但是正如我在开始时提到的那样-这不是最简单的方式,并且一切都取决于您的特定情况。主要是因为“反文档频率”部分考虑了整个索引中的术语-每个下一个添加到索引的文档都可能会更改同一搜索查询的得分。

    我知道我没有直接回答,但希望能帮助您了解它的工作原理。

    关于elasticsearch - Elasticsearch-查询具有不同术语的主要和次要属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49617053/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com