优化Elasticsearch搜索结果,不分词以及纯数字查询

2020-06-01 00:00:00 专区 订阅 简单 希望 平安

Elasticsearch的默认会对查询语句进行N-grams的分词处理,假如是"平安", 查的时候结果不仅会显示结果"平安", 还会显示"平", "安"的结果,如何去掉单字结果呢?并不是网上所说的修改mapping,not_analyzed(2.x版本), keywords(5.x版本), 也不是加入most_fields, minimum_match等参数,而是简单的进行短语匹配,通过加入bool, should条件,形成多个字段的同时匹配,代码大概这样写:

search_res = es.search(index='test_index', body={
        "query": {
            "bool": {
                "should": [
                    {"match_phrase": {"field1": name}},
                    {"match_phrase": {"field2": name}},
                    {"match_phrase": {"field3": name}},
                    {'wildcard': {'field4': {'value': '*{}*'.format(name)}}}
                ]
            }
        }
    })

相关文章