Получите условия запроса из запроса Lucene для выделения

StackOverflow https://stackoverflow.com/questions/552829

Вопрос

Мои запросы Lucene обычно состоят из множества комбинированных полей AND.Можно ли снова получить запрошенные поля из объекта Query?

Нет правильного решения

Другие советы

Вы имели в виду извлечение терминов или названий полей?Поскольку вы уже знаете, что обрабатываете BooleanQuery, для извлечения полей вы можете просто перебирать массив BooleanClause, возвращаемый BooleanQuery.getClauses(), переписывать каждое предложение в его базовый запрос (Query.rewrite) и применять рекурсивно, пока не получите TermQuery. на твоих руках.

Если вы имели в виду извлечение терминов, я не уверен насчет Lucene.NET, но в Java Lucene вы можете использовать org.apache.lucene.search.highlight.QueryTermExtractor;вы передаете (переписанный) запрос в одну из его перегрузок getTerms и получаете массив WeightedTerms.

Насколько я помню, минусами использования этой техники являются:

  • Поскольку внутри него используется набор терминов, он не будет обрабатывать несколько экземпляров одного и того же токена, например.«сон во сне»
  • Он поддерживает только базовые типы запросов (TermQuery, BooleanQuery и любой другой тип запроса, поддерживающий Query.extractTerms).Я полагаю, что мы использовали его внутри для экземпляров SpanNearQuery и SpanNearOrderedQuery, но я могу ошибаться.

В любом случае, я надеюсь, этого достаточно, чтобы вы начали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top