【发布时间】:2015-05-31 05:48:38
【问题描述】:
我想编写一个自定义 Elastic Search 评分器,它从索引中的文档中获取所有术语,从查询中获取所有术语并根据一些自定义逻辑计算分数。
经过一些研究,似乎在 Java 中的 Elastic Search 中实现自定义记分器最直接的方法是使用其“本机脚本”功能(即实现 AbstractDoubleSearchScript)。我遇到的问题是我找不到在这样的脚本中访问原始查询对象的方法。我只能访问匹配的文档及其字段。有什么方法可以访问用于搜索的查询对象?
或者,对于每个结果运行自定义 Java 代码并使用我自己的(复杂)算法(需要知道查询和文档的完整术语列表)对匹配进行评分的最佳方法是什么?
【问题讨论】:
-
您是否考虑过编写一个自定义插件来扩展
org.elasticsearch.common.lucene.search.function.ScoreFunction并提供您拥有的所有自定义逻辑? -
我还没有考虑
ScoreFunction。从文档中我得到的印象是“脚本评分”应该是最灵活的选项,我可以用 Java 编写它们,但老实说,我对所有的 elasticsearch API 有点迷茫。 -
您是否看到/考虑过使用来自elastic.co/guide/en/elasticsearch/reference/current/… 的帮助程序使用自定义脚本进行评分?
-
这是我尝试使用的 API,但来自 Java,而不是 Groovy。我找不到访问查询词的方法。
-
您可以使用“params”字段将查询词传递到自定义脚本中,如下所述:elastic.co/guide/en/elasticsearch/guide/current/…
标签: elasticsearch lucene