我想计算在elasticsearch中索引的两个文档之间的相似性。我知道可以使用术语向量在lucene中完成它。这样做的直接方法是什么?
我发现有一个相似模块正是这样做的: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-similarity.html
如何将其集成到我的系统中?我正在使用pyelasticsearch来调用elasticsearch命令,但如果需要,我可以使用REST api进行相似性。
答案 0 :(得分:5)
我认为Elasticsearch文档很容易被误解。
此处“相似性”不是文档或字段的比较,而是根据查询中匹配的术语对匹配文档进行评分的机制。
文档说明:
A similarity (scoring / ranking model) defines how matching documents are scored.
Elasticsearch支持的相似度算法是基于语料库(索引)中术语分布的概率模型。
关于术语向量,这也可能被误解。
此处“术语向量”是指可轻松查询的文档术语的统计信息。似乎跨术语向量的任何相似性度量都必须在您的应用程序后查询中完成。有关术语向量的文档说明:
Returns information and statistics on terms in the fields of a particular document.
如果您需要在非常大的语料库中使用高性能(快速)相似性度量标准,您可以考虑将存储在索引中的文档的低级嵌入用于进行近似最近邻搜索。在您的KNN查找(大大减少候选集)之后,您可以为排名执行更昂贵的度量计算。
这是评估近似KNN解决方案的优秀资源: https://github.com/erikbern/ann-benchmarks