我的索引文档中有一个字段,我需要搜索案例敏感.我正在使用匹配查询来获取结果.我的数据文档的一个例子是:
{
"name" : "binoy",
"age" : 26,
"country": "India"
}
Run Code Online (Sandbox Code Playgroud)
现在当我提出以下查询时:
{
“query” : {
“match” : {
“name” : “Binoy"
}
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个匹配"binoy"对抗"Binoy".我希望搜索区分大小写.默认情况下,弹性搜索似乎与案例不敏感有关.如何在elasticsearch中使搜索区分大小写?
小智 5
这取决于您为 field 定义的映射name。如果您尚未定义任何映射,则 elasticsearch 会将其视为字符串并使用标准分析器(将标记小写)来生成标记。您的查询也将使用相同的分析器进行搜索,因此匹配是通过小写输入来完成的。这就是为什么“Binoy”匹配“binoy”
要解决它,您可以定义一个没有lowercase过滤器的自定义分析器并将其用于您的领域name。您可以定义分析器如下
"analyzer": {
"casesensitive_text": {
"type": "custom",
"tokenizer": "standard",
"filter": ["stop", "porter_stem" ]
}
}
Run Code Online (Sandbox Code Playgroud)
您可以定义映射name如下
"name": {
"type": "string",
"analyzer": "casesensitive_text"
}
Run Code Online (Sandbox Code Playgroud)
现在您可以在 上进行搜索name。
注意:上面的分析器是为了举例。您可能需要根据您的需要更改它
在映射中,您可以将字段定义为not_analyzed。
curl -X PUT "http://localhost:9200/sample" -d '{
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}'
echo
curl -X PUT "http://localhost:9200/sample/data/_mapping" -d '{
"data": {
"properties": {
"name": {
"type": "string",
"index": "not_analyzed"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
现在,如果您可以进行普通索引和普通搜索,它将不会对其进行分析,并确保其提供不区分大小写的搜索。
| 归档时间: |
|
| 查看次数: |
6613 次 |
| 最近记录: |