python - Elasticsearch:具有多个字段的单个 "more-like-this"查询与具有单个字段的多个 "more-like-this"查询

标签 python elasticsearch

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

在试验时,我发现具有多个字段的单个 MLT 查询的结果与每个具有一个字段的多个 MLT 查询的 bool 值产生不同的结果。以下示例(截断):

具有多个字段的单个 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:具有多个字段的单个 "more-like-this"查询与具有单个字段的多个 "more-like-this"查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39656980/

相关文章:

python - 通过 XPath 获取文本,忽略标记

python - 更改 CNN 以使用 3D 卷积

python - 有没有办法使用 MLflow 记录数据集的描述性统计信息?

python - Pandas 动态基于行的权益计算

regex - 如何从 logstash 中删除事件?

Elasticsearch 高 CPU 和 RAM 使用率

php - Elasticsearch搜索在索引后延迟提取最新数据

python - 删除文本文件中以 `#|...|#` 为界的注释 block - python

elasticsearch - 尽管知道电子邮件确实存在,但是电子邮件的ES curl无法返回正确的结果

elasticsearch - ElasticSearch:如何计算嵌套查询的分数?