从 Lucene 查询中获取查询术语以进行突出显示
-
23-08-2019 - |
题
我的 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 实例,但我对此可能是错的。
不管怎样,我希望这足以让你开始。
不隶属于 StackOverflow