首页 > 解决方案 > Elasticsearch过滤问题,大写与小写字段过滤

问题描述

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

当我尝试使用 {"term": {"status": "Publish"}} 过滤时,它不会返回任何命中当我尝试使用 {"term": {"status": 'publish"}} 过滤时,它会返回正确的结果。

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

我的 kibana GET 以“状态”返回产品:“发布”。

我还记得使用大写值插入状态。那么为什么我只能按小写过滤呢?

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

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

标签: elasticsearchkibana

解决方案


如果未指定分析器,则标准分析器是默认分析器。因此,Publish被索引为publish.

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

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

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

推荐阅读