Elasticsearch 过滤问题,大写与小写字段过滤

Elasticsearch Filtering woes, uppercase vs lowercase field filtering

我的索引中有一个名为“状态”的关键字类型的字段。

当我尝试使用 {"term": {"status": "Publish"}} 进行过滤时,returns 没有命中 当我尝试使用 {"term": {"status": 'publish"}} 进行过滤时,returns 得到了正确的结果。

如果状态输入为小写,这是一回事,但它们实际上是大写的。

我的 kibana GET returns 具有“状态”的产品:“发布”。

我还记得插入大写值的状态。那为什么我只能按小写筛选?

最大的警告,我知道这样做很可疑,我试图在项目索引已经创建后添加“状态”映射。这就是我现在为什么会这样的罪魁祸首。

有谁知道为什么映射中的实际值是大写时过滤仅适用于小写值?

如果没有指定分析器,standard analyzer是默认的分析器。因此,Publish 被索引为 publish

如果您没有明确定义任何映射,那么您需要将 .keyword 添加到状态字段。这使用关键字分析器而不是标准分析器(注意状态字段后的“.keyword”)。

term query 不会对搜索词应用任何分析器,因此只会在倒排索引中查找确切的词。所以要搜索确切的术语,您需要使用 status.keyword 或更改字段的映射。

{
  "query": {
    "term": {
      "status.keyword": "Publish"
    }
  }
}