我将在去年的Elasticsearch邮件列表中查看去年的讨论。另一个ES用户正在尝试完全按照您的意图进行操作,匹配数组元素并按相似性进行排序。在他的情况下,他的数组成员是“一个”,“两个”,“三个”等,但几乎相同:
http://elasticsearch-users.115913.n3.nabble.com/Similarity-score-in-array- td4041674.html
讨论中指出的问题是,没有什么可以让您准确地找到想要的东西。您使用数组成员(字符串或整数,我认为都可以)的方法可以使您接近,但可能与您要实现的目标有所不同。原因是Elasticsearch(以及Lucene / Solr也是如此)中的默认相似性评分机制是TF / IDF:http ://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance- intro.html
TF / IDF可能非常接近,并且取决于用例,可能会为您提供相同的结果,但不能保证做到这一点。经常出现的标签(例如,“ 1”的频率是“ 2”的两倍)会更改每个术语的权重,以致您可能无法完全获得所需的内容。
如果您需要精确的评分/相似度算法,我相信您需要自定义评分。正如您发现的那样,自定义评分脚本无法很好地扩展,因为该脚本将在每个文档中运行,因此开始时并不太快,并且响应时间会以线性方式衰减。
我个人可能会尝试Elasticsearch提供的某些相似性模块,例如BM25:
http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/index-modules- similarity.html