ITPub博客

首页 > IT基础架构 > > 优化Elasticsearch搜索结果,不分词以及纯数字查询

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

作者:格伯纳 时间:2020-06-01 13:45:16 0 删除 编辑

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)}}}
                ]
            }
        }
    })

同时这样写的好处是还可以对纯数字进行搜索("0001"这种), 这在之前用multi_match是做不到的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3137630/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984274