Solr高亮显示为字段/片段提供了ANY术语,而不是完全满足查询的字段/片段



我使用的是标准荧光笔Solr 5.x,我得到的代码片段甚至只匹配其中一个搜索词,即使我指示q.op=and。我只需要与所有术语匹配的字段和代码段(除非我说q.op=OR或省略它(,即字段/代码段必须满足查询。Solr确实返回了包含所有术语的字段/代码段,但也返回了许多其他术语。

我使用hl.fl=*来获取只有术语的字段,并搜索默认字段(包含完整文档的'text'(。需要使用*,因为我有多个动态字段。大多数字段是"text_general"类型(用于搜索和HL(,有些字段是"string"类型用于分面。

如果代码段不可能包含所有术语,我必须只获取完全满足查询的字段(因为问题更多的是关于匹配所有术语,但搜索查询可能会变得任意复杂,所以字段/代码段应该匹配查询(。

此外,下一步是使用基于邻近度的搜索/术语来突出显示片段。我应该做什么/用什么?在这个场景中突出显示的字段也应该满足邻近性查询(与我得到的字段包含任何术语不同,而不考虑邻近性约束和其他查询术语等(

谢谢你的帮助。

我在突出显示方面也遇到了同样的问题。在我的情况下,类似的查询

(foo AND bar) OR eggs

突出显示的eggsfoo,尽管bar不在文档中。我没能想出合适的解决方案,但我想出了一个肮脏的变通办法。

我使用以下查询:

id:highlighted_document_id AND text:(my_original_query)

其中CCD_ 3设置为。然后,我将explain文本解析为highlighted_document_id。文本包含查询中的术语,这些术语对分数有贡献。解释中没有这些不应强调的术语。

我用来提取术语的Python正则表达式(对Solr 5.2.1有效(:

term_regex = re.compile(r'weight(text:(.+) in') wildcard_term_regex = re.compile(r'text:(.+), product')

然后我简单地搜索高亮文本中的标记,如果该术语与CCD_ 7和CCD_。

这个解决方案可能非常有限,但对我来说有效。

最新更新