Case_insensitive 不适用于带有西里尔数据的通配符字段类型

问题描述 投票:0回答:1

当您有一个索引,其字段类型为通配符且填充了西里尔数据,然后当您使用 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

elasticsearch wildcard case-insensitive cyrillic
1个回答
0
投票

你的小写“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

一些注意事项以获取更多信息:

限制

通配符字段像关键字字段一样未标记化,因此不支持 依赖词位置的查询,例如短语查询。什么时候 运行通配符查询时,任何重写参数都将被忽略。得分 总是一个常数分数。

© www.soinside.com 2019 - 2024. All rights reserved.