高亮显示对象字段,获取该对象的相关字段

时间:2019-04-30 15:31:40

标签: elasticsearch

我正在使用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转换过来的,可能会有一些语法错误,但是我确实有想要的结果,我只是不知道如何添加信息想要。

1 个答案:

答案 0 :(得分:2)

Elasticsearch看起来不像您可以突出显示不匹配的字段。这很有意义。 我能想到的唯一解决方案是将两个字段串联起来。这样,您将只有这样一个字段:

 "more_info" :  "486513 - Lorem ipsum dolor sit amet, consectetur adipiscing elit,"

,您可以立即保留突出显示查询。

然后,您将与您的字段匹配,从这里您可以处理数据以将它们分开。并非最佳做法,但首先要突出显示不匹配的字段会很奇怪