Нечувствительность к регистру не работает - программирование
Подтвердить что ты не робот

Нечувствительность к регистру не работает

Я не могу понять, почему мои поисковые запросы чувствительны к регистру. Все, что я прочитал, говорит, что ES по умолчанию нечувствительна. У меня есть сопоставления, которые определяют стандартный анализатор для индексирования и поиска, но кажется, что некоторые вещи по-прежнему чувствительны к регистру - т.е. Подстановочный знак:

"query": {
"bool": {
  "must": [
    {
      "wildcard": {
        "name": {
          "value": "Rae*"
        }
      }
    }
  ]
}

Это не работает, но "rae *" работает по желанию. Мне нужно использовать подстановочный знак для поиска типа "начало-с" (я полагаю).

Я использую NEST из приложения .Net и задаю анализаторы при создании индекса таким образом:

  var settings = new IndexSettings();
  settings.NumberOfReplicas = _configuration.Replicas;
  settings.NumberOfShards = _configuration.Shards;
  settings.Add("index.refresh_interval", "10s");
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer()));
  settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer()));

В этом случае он использует простой анализатор, но стандартный имеет тот же результат.

Отображение выглядит следующим образом:

name: {
    type: string
    analyzer: simple
    store: yes
}

Кто-нибудь понял, что здесь не так?

Спасибо

4b9b3361

Ответ 1

Из документации,

Msgstr "[Подстановочный запрос] соответствует документам, поля которых соответствуют подстановочному выражению (не проанализировано) ".

Поскольку поисковый термин не анализируется, вам необходимо выполнить анализ самостоятельно, прежде чем создавать поисковый запрос. В этом случае это просто означает, что ваш поисковый запрос должен быть в нижнем регистре. В качестве альтернативы вы можете использовать query_string:

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "name:Rae*"
          }
        }
      ]
    }
  }
}