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