当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch支持区分大小写和不区分大小写

羊舌诚
2023-03-14
"categories": {
    "type": "keyword",
    "normalizer": "lowercase_normalizer"
}

对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写!

考虑以下文件:

"_id": "product1",
"_source": {
    "categories": [
        "WOMEN",
        "Footwear"
     ]
}

"_id": "product2",
"_source": {
    "categories": [
        "Men",
        "Footwear"
     ]
}

运行以下查询:

{
  "size": 0,
  "aggs": {
    "categories": {
      "terms": {
        "field": "categories",
        "size": 100
      }
    }
  }
}

返回:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 40453,
    "max_score": 0,
    "hits": [

    ]
  },
  "aggregations": { 
    "sterms#categories": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 12453,
      "buckets": [
        {
          "key": "men",
          "doc_count": 27049
        },
        {
          "key": "women",
          "doc_count": 21332
        },
       .........
      ]
    }
  }
}

是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的[“women”,“men”]感兴趣。

Elasticsearch论坛中的问题

谢谢,伊泰

共有1个答案

范浩宕
2023-03-14

您需要在属性中配置一个不使用任何规范化程序的字段:

关于字段的文件

类似于

"categories": {
    "type": "keyword",
    "normalizer": "lowercase_normalizer",
    "fields": {
        "case_sensitive": {
            "type": "keyword"
        }
    }
}
{
  "size": 0,
  "aggs": {
    "categories": {
      "terms": {
        "field": "categories.case_sensitive",
        "size": 100
      }
    }
  }
}
 类似资料:
  • 问题内容: 我有一个Lucene索引,该索引当前区分大小写。我想添加的 选项 有不区分大小写作为后备的。这意味着与案例匹配的结果将获得更大的权重,并且将首先出现。例如,如果结果数限制为10,并且有10个匹配项符合我的情况,那就足够了。如果仅找到7个结果,则可以从不区分大小写的搜索中再添加3个结果。 我的案子实际上更复杂,因为我有不同重量的物品。理想情况下,匹配“错误”的表壳会增加一些重量。不用说,

  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut

  • 问题内容: 在PHP中,变量名和常量名区分大小写,而函数名不区分大小写。 据我所知,PHP是发生这种情况的唯一语言。我使用的所有其他语言要么完全区分大小写,要么完全不区分大小写。 为什么PHP 部分 区分大小写? 请注意,我并不是在问 哪个 名称区分大小写,而是 为什么 。 更新资料 为了使那些认为我要问 哪个的 人受益,我想添加以下列表: 区分大小写 弦乐 变数 对象属性 常量,默认情况下 不区

  • 问题内容: 我想按不区分名称的名称搜索用户表中的数据。 我收到一个错误: 意外令牌:% 。我应该在哪里放置“%”? 问题答案: 您可以使用concat运算符: 或使用命名参数: (使用Spring Boot 1.4.3测试)

  • 问题内容: 我有一个充满小写和大写数据的json。例如 : 而且我有类似的东西: 我想做的是搜索朋友,而不用看大写和小写。因此,基本上,当我在输入中键入“ John”,“ JOHN”或简单地输入“ john”时,它应该返回我的朋友John。 那么是否可以将不区分大小写的选项应用于过滤器? 问题答案: 将您在使用字符串的toLowerCase的适用范围内定义的函数名称传递给您。参见ngFilter。