Pergunta

consultas Meu Lucene geralmente existem de um monte de e campos combinados. É possível obter os campos consultados fora do objeto de consulta novamente?

Nenhuma solução correta

Outras dicas

Você quis dizer extrair os termos ou nomes de campo? Desde que você já sabe que você está lidando com um BooleanQuery, para extrair os campos que você pode simplesmente iterar a matriz BooleanClause retornado por BooleanQuery.getClauses (), reescrever cada cláusula para a sua consulta de base (Query.rewrite) e aplicar de forma recursiva até que você tenha um TermQuery em suas mãos.

Se você fez extração médio prazo, eu não tenho certeza sobre Lucene.NET, mas em Java Lucene você pode usar org.apache.lucene.search.highlight.QueryTermExtractor; você passar uma consulta (reescrito) a um dos seus getTerms sobrecargas e obter uma matriz de WeightedTerms.

Tanto quanto me lembro, as desvantagens de usar esta técnica são:

  • Uma vez que ele usa internamente um conjunto de termos não vai lidar com múltiplas instâncias da mesma forma, por exemplo, "Sonho dentro de um sonho"
  • Ele suporta apenas tipos de consulta de bases (TermQuery, BooleanQuery e qualquer outro tipo de consulta que suporta Query.extractTerms). Eu acredito que nós usamos internamente para instâncias SpanNearQuery e SpanNearOrderedQuery, mas posso estar errado sobre isso.

De qualquer maneira eu espero que isso é o suficiente para você começar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top