【问题标题】:Elasticsearch: Single "more-like-this" query with multiple fields vs Multiple "more-like-this" query with single fieldsElasticsearch:具有多个字段的单个“更像这个”查询与具有单个字段的多个“更像这个”查询
【发布时间】:2017-02-01 02:10:06
【问题描述】:

Elasticsearch 允许通过其“more-like-this”(MLT)查询来搜索相似的文档。我正在尝试更好地理解和调整查询以更好地找到类似的文档。

在尝试使用它时,我发现来自具有多个字段的单个 MLT 查询的结果会从多个具有一个字段的多个 MLT 查询的布尔值中产生不同的结果。以下示例(截断):

具有多个字段的单个 MLT 查询

es.search(index=INDEX_NAME, body = {'query': {
    "more_like_this" : {
        "fields" : ['title', 'category_name', 'brand'],
        "like" : []
        }
    }
})

单个字段的多个 MLT 查询

es.search(index=INDEX_NAME, body = {'query': {
    'bool': {
                'should': [
                    {'more_like_this' : {
                    'fields' : ['title'],
                    'like' : [],
                    }},

                    {'more_like_this' : {
                    'fields' : ['category_name'],
                    'like' : [],
                    }},

                    {'more_like_this' : {
                    'fields' : ['brand'],
                    'like' : [],
                    }},
                ]
            }
    }
})

为什么会这样?

我了解 MLT 查询会结合单个查询中列出的所有字段的文本来搜索文档。但是,标题、类别名称和品牌字段中的文本没有重叠。因此,结果应该是相同的。但是,结果是不同的——顺便说一句,多个 MLT 查询效果更好。

如果这个问题没有直接的解决方案,我深表歉意。我正在寻求弹性专家对如何改进返回的查询的更多理解。

如果你有时间,这是我在 MLT 上发布的一个尚未回答的问题:Elasticsearch "more_like_this" query specific to fields

【问题讨论】:

    标签: python elasticsearch


    【解决方案1】:

    如果我理解正确,规范化过程发生在两种不同情况下的字段内和跨字段。分数被字段字符串的长度、出现次数等标准化。如果这在字段之间变化很大,那么您不会期望两个查询的结果是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2015-06-20
      • 1970-01-01
      • 2020-02-26
      相关资源
      最近更新 更多