我正在使用elasticsearch7,并且在对象的特定字段中使用了高亮显示。我的对象具有3个属性:
attribute1
attribute2
attribute3
attribute1和attribute2只是数字。但是我想在我的attribute3
和其他字段(我做过的女巫)中进行搜索,如果我的查询匹配(我做过)则突出显示字段attribute3,但我也希望我的突出显示为attribute1和attribute2。这是一个示例
PUT
{
"title": "title",
"desc": "this is a test",
"more_info": [{
"rng": 486513,
"more" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit,"
},
{
"rng": 145142
"more": "What is my purpose ? To be an example. oh god"
}
]
}
GET
{
"query": {
'bool': {
'should' : { [
'multi_match' : {
'query' : 'dolor sit amet'
'fields' : [ 'title', 'more_info.more']
}
]}
}
}
'highlight' : {
'fields' : {[
'more_info': {
"fragment_size" => 0,
"number_of_fragments" => 1,
"no_match_size" => 250,
"boundary_scanner" => "sentence"
}
}]
}
}
因此,我的结果就是我希望在突出显示中得到的结果,我得到了Lorem ipsum dolor sit amet, consectetur adipiscing elit
女巫,但我也想在某个地方得到486513
PS:请记住,我正在使用symfony,所以我是从php转换过来的,可能会有一些语法错误,但是我确实有想要的结果,我只是不知道如何添加信息想要。
答案 0 :(得分:2)
Elasticsearch看起来不像您可以突出显示不匹配的字段。这很有意义。 我能想到的唯一解决方案是将两个字段串联起来。这样,您将只有这样一个字段:
"more_info" : "486513 - Lorem ipsum dolor sit amet, consectetur adipiscing elit,"
,您可以立即保留突出显示查询。
然后,您将与您的字段匹配,从这里您可以处理数据以将它们分开。并非最佳做法,但首先要突出显示不匹配的字段会很奇怪