16

我想计算在弹性搜索中索引的两个文档之间的相似性。我知道它可以使用术语向量在 lucene 中完成。直接的方法是什么?

我发现有一个相似性模块正是这样做的: http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-similarity.html

如何将其集成到我的系统中?我正在使用 pyelasticsearch 调用 elasticsearch 命令,但如果需要,我愿意使用 REST api 来实现相似性。

4

1 回答 1

7

我认为 Elasticsearch 文档很容易被误解。

这里的“相似性”不是文档或字段的比较,而是一种基于来自查询的匹配项对匹配文档进行评分的机制。

该文档指出:

相似度(评分/排名模型)定义了匹配文档的评分方式。

Elasticsearch 支持的相似度算法是基于语料库(索引)中词条分布的概率模型。

关于术语向量,这也可能被误解。

这里的“术语向量”是指可以轻松查询的文档术语的统计信息。似乎任何跨术语向量的相似性测量都必须在您的应用程序后查询中完成。关于术语向量的文档说明:

返回有关特定文档字段中术语的信息和统计信息。

如果您需要一个非常大的语料库上的高性能(快速)相似性度量,您可能会考虑将存储在索引中的文档的低秩嵌入进行近似最近邻搜索。在你的 KNN 查找之后,这大大减少了候选集,你可以为排名进行更昂贵的度量计算。

这是评估近似 KNN 解决方案的绝佳资源: https ://github.com/erikbern/ann-benchmarks

于 2016-09-14T03:47:15.730 回答