【发布时间】:2021-03-18 09:47:52
【问题描述】:
我知道 ElasticSearch 默认不区分大小写,我们可以使用映射来强制区分大小写。
但是,我的要求是我需要在字段的不区分大小写和区分大小写之间切换。我应该如何解决这个问题。
【问题讨论】:
标签: elasticsearch
我知道 ElasticSearch 默认不区分大小写,我们可以使用映射来强制区分大小写。
但是,我的要求是我需要在字段的不区分大小写和区分大小写之间切换。我应该如何解决这个问题。
【问题讨论】:
标签: elasticsearch
您可以使用multi-fields 为区分大小写和不区分大小写的搜索索引相同的字段。
添加一个包含索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
text 类型字段使用标准分析器(可用于不区分大小写的搜索),keyword 字段使用关键字分析器(可用于不区分大小写的搜索)
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": { // note this
"raw": {
"type": "keyword"
}
}
}
}
}
}
索引数据:
{
"name": "john"
}
{
"name": "JOHN"
}
区分大小写搜索的搜索查询:
{
"query": {
"match": {
"name.raw": "JOHN"
}
}
}
搜索结果:
"hits": [
{
"_index": "66679730",
"_type": "_doc",
"_id": "1",
"_score": 0.6931471,
"_source": {
"name": "JOHN"
}
}
]
不区分大小写的搜索查询:
{
"query": {
"match": {
"name": "JOHN"
}
}
}
搜索结果将是
"hits": [
{
"_index": "66679730",
"_type": "_doc",
"_id": "1",
"_score": 0.18232156,
"_source": {
"name": "JOHN"
}
},
{
"_index": "66679730",
"_type": "_doc",
"_id": "2",
"_score": 0.18232156,
"_source": {
"name": "john"
}
}
]
【讨论】: