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

时间:2021-02-10 18:21:24

标签: python dictionary elasticsearch querying

说我有这个:

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) 查询做什么和不能做什么?

1 个答案:

答案 0 :(得分:1)

您可以添加 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 查询针对两个具体字段。


关于:

<块引用>

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

你到底在寻找什么?