【发布时间】:2020-01-21 14:43:56
【问题描述】:
在 Solr 实现中,我试图根据其他字段而不是我们搜索的字段进行一些条件突出显示。
我希望只有在 Solr 中指示该字段可以针对该元素公开时,才能突出显示字段“内容”的匹配结果。
给定一个 Solr 基础,其中填充了:
[{ firstname:"Roman",
content: "A quick response is the best",
access:"" },
{ "firstname":"Roman",
"content": "Responsive is important",
"access":"contentAuthorized" }
]
我想在我的答案中获取两个文档,并且仅针对具有数据“访问”:“contentAuthorized”的那个字段突出显示“内容”字段,因此我正在执行查询:
q:(firstname:r* OR (+tags:contentAuthorized AND +content:r*))
预期的答案是:
...
{
{
"firstname":"Roman"
},
{
"firstname":"Roman"
}
},
highlighting":{
"0f278cb5-7150-42f9-8dca-81bfa68a9c6e":{
"firstname":["<em>Roman</em>"],
"105c6464-0350-4873-9936-b46c39c88647":{
"firstname":["<em>Roman</em>"],
"content":["<em>Responsive</em> is important],
}
}
但我实际上得到了:
...
{
{
"firstname":"Roman"
},
{
"firstname":"Roman"
}
},
highlighting":{
"0f278cb5-7150-42f9-8dca-81bfa68a9c6e":{
"firstname":["<em>Roman</em>"],
"content":["A quick <em>response</em> is the best"],
"105c6464-0350-4873-9936-b46c39c88647":{
"firstname":["<em>Roman</em>"],
"content":["<em>Responsive</em> is important],
}
}
所以,当 (+tags:contentAuthorized AND +content:r*) 为假时,我在第二个元素的高亮显示“内容”。
有人知道我如何使用 Solr 进行条件突出显示吗? 感谢您阅读本文并花时间思考:D
【问题讨论】:
-
我认为 Solr 不支持用于突出显示您正在寻找的额外逻辑。我认为您需要在客户端应用程序中实现附加逻辑。您可以做的另一件事是查看 solr_config.xml 中“solr.HighlightComponent”searchComponent 的配置。
-
感谢@HectorCorrea 的回答,我认为在客户端应用程序上添加逻辑是最简单的解决方案,您是对的。有一些缺点:这意味着我们需要一个更强大的应用程序服务器来对 Solr 返回的 Json 进行这些操作,并且我们会降低 Solr 的速度(例如,如果我们尝试对 50 000 个返回的文档执行此操作)。但是,总的来说,解决方案非常棒:D。我还不知道如何充分利用“solr.HighlightComponent”功能,我没有看到任何可以帮助做到这一点的东西,但感谢您提供完整列表。祝你一切顺利
标签: solr conditional-statements highlight