【问题标题】:Accessing Lucene query in Elastic Search's native script scorer在 Elastic Search 的本机脚本记分器中访问 Lucene 查询
【发布时间】: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


【解决方案1】:

实现自定义查询类并将实际查询(例如布尔查询)包装为其子查询。在 Query 类中,您有 api 来实现自定义记分器,您可以在其中访问查询和正在评分的当前文档。要细粒度控制分数,请实现自定义相似度类。

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 2016-02-19
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多