我使用的是标准荧光笔Solr 5.x,我得到的代码片段甚至只匹配其中一个搜索词,即使我指示q.op=and。我只需要与所有术语匹配的字段和代码段(除非我说q.op=OR或省略它(,即字段/代码段必须满足查询。Solr确实返回了包含所有术语的字段/代码段,但也返回了许多其他术语。
我使用hl.fl=*来获取只有术语的字段,并搜索默认字段(包含完整文档的'text'(。需要使用*,因为我有多个动态字段。大多数字段是"text_general"类型(用于搜索和HL(,有些字段是"string"类型用于分面。
如果代码段不可能包含所有术语,我必须只获取完全满足查询的字段(因为问题更多的是关于匹配所有术语,但搜索查询可能会变得任意复杂,所以字段/代码段应该匹配查询(。
此外,下一步是使用基于邻近度的搜索/术语来突出显示片段。我应该做什么/用什么?在这个场景中突出显示的字段也应该满足邻近性查询(与我得到的字段包含任何术语不同,而不考虑邻近性约束和其他查询术语等(
谢谢你的帮助。
我在突出显示方面也遇到了同样的问题。在我的情况下,类似的查询
(foo AND bar) OR eggs
突出显示的eggs和foo,尽管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_。
这个解决方案可能非常有限,但对我来说有效。