Elasticsearch:突出显示查询词,而不是过滤词?

Elasticsearch: highlight on query terms, not filter terms?

假设我有这个:

search_object = {
    'query': { 
        'bool' : { 
            'must' : { 
                'simple_query_string' : { 
                    'query': search_text,
                    'fields': [ 'french_no_accents', 'def_no_accents', ],
                },  
            },
            'filter' : [ 
                { 'term' : { 'def_no_accents' : 'court', }, },
                { 'term' : { 'def_no_accents' : 'bridge', }, },
            ],
              
        },
    },
    'highlight': {
        'encoder': 'html',
        'fields': {
            'french_no_accents': {},
            'def_no_accents': {},
        },
        'number_of_fragments' : 0,
    },        
}

...无论我输入什么搜索字符串 search_text,它的组成词以及“court”和“bridge”都会突出显示。我不想突出显示“法院”或“桥梁”。

我试过将“突出显示”键值放在结构中的不同位置......似乎没有任何效果(即抛出语法异常)。

更一般地说,是否有正式语法指定您可以使用 ES (v7) 查询做什么和不能做什么?

您可以添加 highlight query 来限制应该和不应该突出显示的内容:

{
  "query": {
    "bool": {
      "must": {
        "simple_query_string": {
          "query": "abc",
          "fields": [
            "french_no_accents",
            "def_no_accents"
          ]
        }
      },
      "filter": [
        { "term": { "def_no_accents": "court" } },
        { "term": { "def_no_accents": "bridge" } }
      ]
    }
  },
  "highlight": {
    "encoder": "html",
    "fields": {
      "*_no_accents": {                    <--
        "highlight_query": {
          "simple_query_string": {
            "query": "abc",
            "fields": [ "french_no_accents", "def_no_accents" ]
          }
        }
      }
    },
    "number_of_fragments": 0
  }
}

我为这两个字段使用了通配符 (*_no_accents) -- 如果它也匹配不需要的字段,您需要在两个单独的非通配符突出显示字段上复制突出显示查询,例如你原来有。尽管我想不出会发生这种情况,因为您的 multi_match 查询针对两个具体字段。


至于:

More generally, is there a formal grammar anywhere specifying what you can and can't do with ES (v7) queries?

你到底在找什么?