我的 Lucene 查询通常存在一堆 AND 组合字段。是否可以再次从Query对象中获取查询到的字段?

没有正确的解决方案

其他提示

您的意思是提取术语或字段名称吗?由于您已经知道正在处理 BooleanQuery,因此要提取字段,您只需迭代 BooleanQuery.getClauses() 返回的 BooleanClause 数组,将每个子句重写为其基本查询 (Query.rewrite) 并递归应用,直到获得 TermQuery在你的手上。

如果您的意思是术语提取,我不确定 Lucene.NET,但在 Java Lucene 中您可以使用 org.apache.lucene.search.highlight.QueryTermExtractor;您将一个(重写的)查询传递给它的 getTerms 重载之一并获取一个 WeightedTerms 数组。

据我记得,使用这种技术的缺点是:

  • 由于它内部使用术语集,因此它不会处理同一标记的多个实例,例如“梦中之梦”
  • 它仅支持基本查询类型(TermQuery、BooleanQuery 和支持 Query.extractTerms 的任何其他查询类型)。我相信我们已经在内部将它用于 SpanNearQuery 和 SpanNearOrderedQuery 实例,但我对此可能是错的。

不管怎样,我希望这足以让你开始。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top