当术语混合字母和数字时,Elasticsearch会过滤

时间:2016-01-04 18:07:41

标签: elasticsearch

我正在执行以下查询来搜索一些itens:

{
  "filtered" : {
    "query" : {
      "match" : {
        "name_db" : {
          "query" : "Human",
          "type" : "boolean"
        }
      }
    },
    "filter" : {
      "terms" : {
        "cat" : [ "B8E" ],
        "execution" : "bool"
      }
    }
  }
}

看到“猫”字段?当它类似于“B8E”时,没有结果(即使它应该),而当它像“320”时,结果是正确的。可能有什么不对?为什么混合字母和数字会有问题?

提前致谢。

PS:我是elasticsearch的新手

1 个答案:

答案 0 :(得分:1)

我非常确定您的字段cat是一个analyzed字符串,因此会以小写形式编制索引(这对数字没有影响)。如果您尝试此查询,则会获得结果。

{
  "filtered" : {
    "query" : {
      "match" : {
        "name_db" : {
          "query" : "Human",
          "type" : "boolean"
        }
      }
    },
    "filter" : {
      "terms" : {
        "cat" : [ "b8e" ],         <--- search in lowercase
        "execution" : "bool"
      }
    }
  }
}

<强>更新

如果要以大写形式索引cat字段,以便可以使用大写(例如"B8E")进行搜索,则需要将其映射更改为not_analyzed,如下所示:

"cat": {
    "type": "string",
    "index": "not_analyzed"
}