当您有一个索引,其字段类型为通配符且填充了西里尔数据,然后当您使用 case_insensitive: true 执行通配符查询时,找不到任何文档。
注意:目前在 ES 7.17.8 版本上
测试例子:
PUT /index
{
"mappings": {
"properties": {
"name": {
"type": "wildcard"
}
}
}
}
POST /index/_doc/1
{
"name": "ТЕСТ"
}
POST /index/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"name": {
"value": "*Тест*",
"case_insensitive": true
}
}
}
]
}
}
}
我试图搜索修复程序,但找不到任何东西。有什么可以帮助解决这个问题吗?
注意: 索引数据和查询数据都是西里尔字符
西里尔字母:
ТЕСТ -
0xd0a2d095d0a1d0a2
Тест -
0xd0a2d0b5d181d182
虽然拉丁语是:
TECT-
0x54454354
Tect-
0x54656374
你的小写“T”有问题:).
Тест
=> tect
POST /test_index_musab/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"name": {
"value": "Tect",
"case_insensitive": true
}
}
}
]
}
}
}
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/keyword.html#wildcard-field-type
一些注意事项以获取更多信息:
限制
通配符字段像关键字字段一样未标记化,因此不支持 依赖词位置的查询,例如短语查询。什么时候 运行通配符查询时,任何重写参数都将被忽略。得分 总是一个常数分数。