Получите условия запроса из запроса Lucene для выделения
-
23-08-2019 - |
Вопрос
Мои запросы 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, но я могу ошибаться.
В любом случае, я надеюсь, этого достаточно, чтобы вы начали.