2

我在弹性搜索查询中面临一个奇怪的问题。我对弹性搜索了解不多。我的查询是:

    {
      "query":
      {
        "bool":
        {
          "must":
            [
              {
                 "text":
                 {
                   "countryCode2":"DE"
                 }
              }
            ],
          "must_not":[],
          "should":[]
        }
    },"from":0,"size":1,"sort":[],"facets":{}
  }

问题是针对“DE”的。它给了我结果,但对于“BE”或“IN”它返回空结果。

4

1 回答 1

4

您正在使用默认映射进行索引,默认情况下会删除英语停用词。国家代码“IN”、“BE”等等都是停用词,甚至没有被索引,因此不可能有匹配的文档,也不能在该字段上取回这些国家代码。

解决方案是在提交您自己的国家代码字段映射后重新索引:

{
    "your_type_name" : {
        "country" : {
            "type" : "string", "index" : "not_analyzed"
        }
    }
}

如果您已经尝试执行此操作但没有任何更改,则映射未正确提交。我建议仔细检查它的 json 结构是否正确,并且您实际上可以使用 get mapping api 将其取回。

由于这是一个常见问题,未来可能会更改默认设置以减少干扰并避免应用任何依赖于语言的文本分析。

于 2013-10-24T08:21:17.047 回答