Elasticsearch 没有突出显示所有匹配项

Elasticsearch not highlighting all matches

我很难理解为什么以下查询对象不会使 ES 突出显示 _source 列中的所有单词。

{
    _source: [
        'baseline',
        'cdrp',
        'date',
        'description',
        'dev_status',
        'element',
        'event',
        'id'
    ],
    track_total_hits: true,
    query: {
        bool: {
            filter: [],
            should: [
                {
                    multi_match:{
                        query: "imposed calcs",
                        fields: ["cdrp","description","narrative.*","title","cop"]
                    }
                }
            ]
        } 
    },
    highlight: { fields: { '*': {} } },
    sort: [],
    from: 0,
    size: 50
}

通过 运行 这个查询,我得到了以下返回的高亮对象。请注意,只有 "calcs" 单词被突出显示。如何构建高亮对象以使 ES 也高亮 "Imposed"?

"highlight": {
    "description": [
        "GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed <em>calcs</em> mising"
    ]
} 

我正在使用以下 "description" 映射:

"description": {
    "type": "text",
    "analyzer": "search_synonyms"
},



"analysis": {
    "analyzer": {
        "search_synonyms": {
            "tokenizer": "whitespace",
            "filter": [
                "graph_synonyms"
            ],
            "normalizer": [
                "normalizer_1"
            ]
        }
    },
    "filter": {
        "graph_synonyms": {
            "type": "synonym_graph",
            "synonyms_path": "synonym.txt"
        }
    },
    "normalizer": {
        "normalizer_1": {
            "type": "custom",
            "char_filter": [],
            "filter": ["lowercase", "asciifolding"]
        }
    }
}

编辑

我认为您的 graph_synonyms 过滤器覆盖了标准化器的过滤器。试试这个:

PUT highlighter
{
  "settings": {
    "analysis": {
      "analyzer": {
        "search_synonyms": {
          "tokenizer": "whitespace",
          "filter": [
            "graph_synonyms",
            "lowercase",
            "asciifolding"
          ]
        }
      },
      "filter": {
        "graph_synonyms": {
          "type": "synonym_graph",
          "synonyms_path": "synonym.txt"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "analyzer": "search_synonyms"
      }
    }
  }
}

原创

我怀疑你的映射中有某种设置阻止了匹配,因为我无法用半默认映射复制它:

PUT highlighter
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "standard",
          "filter": [
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "description": {
        "type": "text",
        "fields": {
          "lowercase": {
            "type": "text",
            "analyzer": "my_analyzer"
          }
        }
      }
    }
  }
}

POST highlighter/_doc
{
  "description": "GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed calcs mising"
}

插入您的查询

GET highlighter/_search
{
  "_source": [
    "baseline",
    "cdrp",
    "date",
    "description",
    "dev_status",
    "element",
    "event",
    "id"
  ],
  "track_total_hits": true,
  "query": {
    "bool": {
      "filter": [],
      "should": [
        {
          "multi_match": {
            "query": "imposed calcs",
            "fields": [
              "cdrp",
              "description.lowercase",
              "narrative.*",
              "title",
              "cop"
            ]
          }
        }
      ]
    }
  },
  "highlight": {
    "fields": {
      "*": {}
    }
  },
  "sort": [],
  "from": 0,
  "size": 50
}

屈服

[
  {
    "_index":"highlighter",
    "_type":"_doc",
    "_id":"Bf5F5HEBW-D5QnrWwTyh",
    "_score":0.5753642,
    "_source":{
      "description":"GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed calcs mising"
    },
    "highlight":{
      "description":[
        "GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN <em>Imposed</em> <em>calcs</em> mising"
      ]
    }
  }
]