我想编写一个自定义弹性搜索记分器,它从索引中的文档中获取所有术语,查询中的所有术语以及基于某些自定义逻辑计算分数。
经过一些研究,似乎在Java中使用Elastic Search实现自定义记分的最直接的方法是使用其“本机脚本”功能(即实现AbstractDoubleSearchScript)。我遇到的问题是我找不到在这样的脚本中访问原始查询对象的方法。我只能访问匹配的文档及其字段。有没有办法访问用于搜索的查询对象?
或者,每个结果运行自定义Java代码的最佳方法是什么,并使用我自己的(复杂)算法对匹配进行评分,该算法需要知道查询和文档的完整术语列表?
答案 0 :(得分:1)
实现自定义Query类并将实际查询(例如布尔查询)包装为其子查询。在Query类中,您可以使用api来实现自定义记分器,您可以在其中访问查询和当前正在评分的文档。要精细控制分数,请实现自定义相似度类。