当我在 Lucene 中搜索查询时,我会收到一个文档列表作为结果。但是我怎样才能在这些文档中获得点击量呢?我想访问查询找到的那些单词的有效负载。
如果您的查询仅包含一个术语,您可以简单地使用TermPositions
来访问该术语的有效负载。但是,如果您使用短语搜索、邻近搜索等进行更复杂的查询,则不能只搜索TermPositions
.
我想收到一个或类似的东西List<Token>
,TokenStream
其中包含查询找到的所有令牌。然后我可以遍历列表并访问每个令牌的有效负载。
我通过使用 SpanQueries 解决了我的问题。几乎每个 Query 都可以表示为 SpanQuery。SpanQuery 可以访问文档中命中的跨度。因为普通的 QueryParser 不产生 SpanQueries,所以我不得不编写自己的解析器,它只创建 SpanQueries。另一种选择是来自 Lucene-Contrib 的 SurroundParser,它也创建了 SpanQueries。
我认为您首先要查看 Lucene Highlighter,因为它会突出显示文档中的匹配术语。