代码之家  ›  专栏  ›  技术社区  ›  grep

弹性精确匹配与子串匹配

  •  0
  • grep  · 技术社区  · 7 年前

    我知道Elastic有“keyword”类型是为了找到精确匹配的东西。前任:

    "address":  { "type": "keyword"}
    

    太酷了。完全匹配的作品!

    二者都 “和” 子字符串 “匹配。所以我决定创建以下映射:

       "address":  { "type": "text" , "index": true }
    

    GET testing_index/_search
    {
        "query" : {
            "constant_score" : { 
                "filter" : {
                    "term" : { 
                        "address" :  "washington"
                    }
                }
            }
        }
    }
    

    或

    GET testing_index/_search
    {
      "query": {
        "match": {
          "address" : "washington"
        }
      }
    }
    

    • 找到确切的字符串
    • 查找子字符串

    0 回复  |  直到 7 年前
        1
  •  1
  •   Chris Montgomery    7 年前

    默认情况下,文本字段使用 default analyzer quick , brown fox ]. 正如您可以想象的那样,这使得很难针对文本字段编写精确的匹配查询。对于您的用例,我建议两个选项之一:

    1. 存储为 keyword ,并使用 wildcard 或 fuzzy 询问。通配符查询,特别是带有前导通配符的查询,是出了名的慢,所以请谨慎进行。
    2. 将字段存储两次:一次作为 关键字 还有一个是 text . 明显的不利因素是扩大了指数的规模。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html