优化Elasticsearch搜索结果,不分词以及纯数字查询
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)}}}
]
}
}
})
相关文章