Question

Mes requêtes Lucene existeront généralement d'un tas de champs et combinés. Est-il possible d'obtenir les champs de l'requêtés objet de la requête à nouveau?

Pas de solution correcte

Autres conseils

Avez-vous dire extraire les termes ou les noms de champs? Puisque vous savez déjà que vous manipulez une BooleanQuery, pour extraire les champs que vous pouvez simplement itérer le tableau BooleanClause retourné par BooleanQuery.getClauses (), réécrire chaque clause à sa requête de base (Query.rewrite) et appliquer de manière récursive jusqu'à ce que vous avez un TermQuery sur vos mains.

Si vous avez dire extraction à long terme, je ne suis pas sûr de Lucene.NET, mais en Java Lucene vous pouvez utiliser org.apache.lucene.search.highlight.QueryTermExtractor; vous passez un (réécrite) requête à l'un de ses getTerms et de surcharges obtenir un tableau de WeightedTerms.

Pour autant que je me rappelle, les inconvénients à l'utilisation de cette technique sont:

  • Depuis qu'il utilise en interne un terme défini, il ne sera pas gérer plusieurs instances du même ordre d'idées, par exemple « Rêve dans un rêve »
  • il ne supporte que les types de requêtes de base (TermQuery, BooleanQuery et tout autre type de requête qui supporte Query.extractTerms). Je crois que nous l'avons utilisé en interne pour les instances SpanNearQuery et SpanNearOrderedQuery, mais je peux me tromper sur ce point.

De toute façon je l'espère, cela est suffisant pour vous aider à démarrer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top