我的 Lucene 查询通常包含一堆 AND 组合字段。是否可以再次从 Query 对象中获取查询的字段?
boris callens
问问题
2460 次
1 回答
2
您的意思是提取术语或字段名称吗?由于您已经知道您正在处理 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 实例,但我可能错了。
无论哪种方式,我希望这足以让你开始。
于 2009-02-17T15:29:10.563 回答