我如何告诉 Solr 返回每个文档的命中搜索词?

2024-02-17

我对 Solr 中的查询有疑问。当我使用多个搜索词执行查询时,这些搜索词全部由 OR 逻辑链接(例如q=content:(foo OR bar OR foobar))比 Solr 返回所有与这些术语匹配的文档列表。但 Solr 做了什么not返回的是哪些文档被哪个术语命中。所以在上面的例子中,我想知道的是我的结果列表中的哪些文档包含该术语foo等等。鉴于这些信息,我将能够创建一个术语文档矩阵。

所以我的问题是:我怎样才能告诉 Solr 给我那条缺失的信息?我确信它在某个地方,否则整个搜索将无法进行。但我错过了什么?感谢您的帮助。

PS:作为解决方法,我对所有搜索词执行单个 Solr 查询。但正如您可以想象的那样,这对于性能来说是一场灾难,因为搜索词的数量可能超过 50 :(


有点取决于您的要求,但据我所知,Solr 中没有对此的具体支持。不过,您可以通过其他几种方式将其组合在一起。不确定您对这些的性能有何期望,不过..

使用突出显示

如果您使用突出显示,则可以解析返回的突出显示片段以获取突出显示文本的开始/结束标记。这将是与您的查询中的某些内容相匹配的术语。

使用debug查询信息

您可以使用以下命令解析查询返回的信息debugQuery=true通过查看来确定某个术语与结果相关联termWeight(二审中心)。这可能是原始术语的过滤版本(如果您对该字段启用了词干提取等功能)。

使用字段折叠

通过使用 group.query,您可以构建与每个术语匹配的文档列表,而不是发出多个请求。如果您需要“包含其中之一”的列表,您还可以构建将多个术语“或”组合在一起的查询。对于大量字段可能无效。

自己解析返回的文档

拿到文档,然后自己提取条款。需要一些模糊匹配,因为您还必须在 Solr 端处理文本处理。

使用函数查询

您可以从 FunctionQuery 中获取每个文档中每个术语的元值,该函数查询该文档中某个术语的出现次数。需要对大量术语进行相当多的函数查询,但可能会很快。

..这两个选项都不完美,但可能可以解决当前的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何告诉 Solr 返回每个文档的命中搜索词? 的相关文章

随机推荐