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"
}
}
}
我的索引中有一个名为“状态”的关键字类型的字段。
当我尝试使用 {"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"
}
}
}