在Solr实现中,我尝试根据其他字段而不是我们搜索的字段来做一些条件高亮显示。
我想得到匹配的结果,一个字段“content”突出显示,只有当它在Solr中指出,这个字段可以公开这个元素。
给定一个Solr基,其中填充有:
[{ firstname:"Roman",
content: "A quick response is the best",
access:"" },
{ "firstname":"Roman",
"content": "Responsive is important",
"access":"contentAuthorized" }
]
我想在我的答案中得到这两个文档,并且只为具有数据“access”:“contentAuthorized”的文档突出显示“content”字段,因此我执行查询:
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*)为false时,我在第二个元素的突出显示部分获得了“content”。
有没有人知道我如何用Solr so做条件高亮显示?谢谢你阅读这篇文章,也谢谢你花时间思考它:D
1条答案
按热度按时间knpiaxh11#
如果只想突出显示某些字段,则需要将查询参数
hl.fl
设置为这些字段。在本例中为hl.fl=content
。然后应设置hl.requireFieldMatch=true
。请参阅Solr突出显示文档:
默认情况下,如果为false,则无论解析的查询引用的是哪个字段,都将突出显示每个要突出显示的字段(hl.fl)的所有查询项。如果设置为true,则只会突出显示与突出显示的字段对齐的查询项。
有关如何使用查询参数的详细信息,请参阅:https://solr.apache.org/guide/8_6/highlighting.html