Получить условия запроса из запроса Lucene для выделения - PullRequest
4 голосов
/ 16 февраля 2009

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

1 Ответ

2 голосов
/ 17 февраля 2009

Вы имели в виду извлечение терминов или имен полей? Поскольку вы уже знаете, что обрабатываете 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, но я могу ошибаться в этом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...