首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solr高亮显示为字段/片段提供任何术语,而不是完全满足查询的字段/片段。

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

Stack Overflow用户
提问于 2015-07-03 03:54:45
回答 1查看 269关注 0票数 0

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

我正在使用hl.fl=*,以获得唯一具有这些条件的字段,并针对默认字段(包含完整文档的“文本”)进行搜索。需要使用*,因为我有多个动态字段。大多数字段为“text_general”类型(用于搜索和HL),有些字段为“string”类型。

如果代码段不可能拥有所有的术语,我必须只获得满足查询要求的字段(因为问题更多地讨论的是匹配所有术语,但是搜索查询可能变得任意复杂,因此字段/片段应该与查询匹配)。

另外,下一步是使用基于邻近的搜索/术语突出显示片段。这件事我该怎么做?在此场景中突出显示的字段还应该满足邻近查询(不像我得到的字段包含任何术语,而不考虑邻近约束和其他查询术语等)。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 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_regexwildcard_term_regex中的任何术语不匹配,则将其删除。

解决方案可能是相当有限的,但对我有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31198161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档