我使用的是Solr5.x标准荧光笔,而且我得到的片段甚至只匹配一个搜索词,即使我表示q.op=AND。我只需要匹配所有术语的字段和片段(除非我说q.op=OR或忽略它),即字段/代码段必须满足查询。Solr确实返回包含所有条件的字段/代码段,但也返回许多其他条件。
我正在使用hl.fl=*,以获得唯一具有这些条件的字段,并针对默认字段(包含完整文档的“文本”)进行搜索。需要使用*,因为我有多个动态字段。大多数字段为“text_general”类型(用于搜索和HL),有些字段为“string”类型。
如果代码段不可能拥有所有的术语,我必须只获得满足查询要求的字段(因为问题更多地讨论的是匹配所有术语,但是搜索查询可能变得任意复杂,因此字段/片段应该与查询匹配)。
另外,下一步是使用基于邻近的搜索/术语突出显示片段。这件事我该怎么做?在此场景中突出显示的字段还应该满足邻近查询(不像我得到的字段包含任何术语,而不考虑邻近约束和其他查询术语等)。
谢谢你的帮助。
发布于 2015-10-26 21:50:02
我在高亮显示时也遇到了同样的问题。在我的例子中,查询如下
(foo AND bar) OR eggs
突出显示蛋和foo,尽管酒吧没有出现在文件中。我没有想出正确的解决方案,但是我设计了一个肮脏的解决方案。
我使用以下查询:
id:highlighted_document_id AND text:(my_original_query)
将debugQuery设置为true。然后为explain解析highlighted_document_id文本。文本包含来自查询的术语,这些条件有助于得分。这些术语不应突出说明,在解释中没有出现。
用于提取术语的Python regex表达式(对Solr 5.2.1有效):
term_regex = re.compile(r'weight\(text:(.+) in') wildcard_term_regex = re.compile(r'text:(.+), product')
然后,我只需搜索突出显示的文本中的标记,如果该术语与term_regex和wildcard_term_regex中的任何术语不匹配,则将其删除。
解决方案可能是相当有限的,但对我有效。
https://stackoverflow.com/questions/31198161
复制相似问题