2015-03-27 1 views
17

Я хотел бы написать пользовательский счетчик Elastic Search, который принимает все термины из документа в индексе, все термины из запроса и на основе некоторой пользовательской логики вычисляет оценку.Доступ к запросу Lucene в собственном скриптовом скрипте Elastic Search

После некоторого исследования кажется, что наиболее простой способ реализовать пользовательский счетчик в Elastic Search в Java - это использовать его функциональные возможности «нативного сценария» (т. Е. Реализовать AbstractDoubleSearchScript). Проблема в том, что я не могу найти способ доступа к исходному объекту запроса в таком скрипте. Я могу получить доступ только к соответствующему документу и его полям. Есть ли способ получить доступ к объекту запроса, который использовался для поиска?

В качестве альтернативы, что является лучшим способом запуска пользовательского кода Java для каждого результата и оценки соответствия с использованием моего собственного (сложного) алгоритма, который должен знать полный список терминов как для запроса, так и для документа?

+0

Считаете ли вы, что вы создаете пользовательский плагин, который должен расширять «org.elasticsearch.common.lucene.search.function.ScoreFunction» и предоставить там все пользовательскую логику? –

+0

Я еще не рассматривал 'ScoreFunction'. Из документов у меня создалось впечатление, что «скоринга скриптов» должна быть наиболее гибкой опцией, и я могу писать их на Java, но, честно говоря, я немного потерял во всех API-интерфейсах elasticsearch. –

+1

Вы видели/считали, что делаете подсчет с помощью специального скрипта, используя помощники из http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-advanced-scripting.html? –

ответ

1

Внедрение пользовательского класса запросов и перенос фактического запроса (например, логического запроса) в качестве его подзапроса. В классе Query у вас есть api для реализации пользовательского счетчика, в котором вы можете получить доступ как к запросу, так и к текущему документу, который вы забиваете. Чтобы мелкозернистое зерно контролировало счет, реализуйте собственный класс подобия.