ElasticSearch нечувствителен к регистру.
"Elasticsearch" не чувствителен к регистру.Строковое свойство JSON будет отображено как text
тип данных по умолчанию (с keyword
типом данных sub или multi поле , которое я вскоре объясню).
Тип данных text
связан с понятием анализа;Во время индекса входная строка подается через цепочку анализа , а результирующие члены сохраняются в инвертированной структуре данных индекса для быстрого полнотекстового поиска.При типе данных text
, в котором вы не указали анализатор, будет использоваться анализатор по умолчанию, а именно Standard Analyzer .Одним из компонентов стандартного анализатора является строчный фильтр токенов , который строчные токены ( термины ).
Когда дело доходит до запроса Elasticsearch через API поиска,Есть много разных типов запросов, чтобы соответствовать практически любому варианту использования.Одно семейство запросов, таких как match
, multi_match
, являются полнотекстовыми запросами.Эти типы запросов выполняют анализ ввода запроса во время поиска, и полученные термины сравниваются с терминами, хранящимися в инвертированном индексе.Анализатор, используемый по умолчанию, также будет Standard Analyzer.
Другое семейство запросов, таких как term
, terms
, prefix
, являются запросами на уровне терминов.Эти типы запросов не анализируют входные данные запроса, поэтому входные данные запроса как есть будут сравниваться с терминами, хранящимися в инвертированном индексе.
В вашем примере ваш запрос term
в поле "city"
не находит совпадений при использовании заглавных букв, поскольку он выполняет поиск в поле text
, входные данные которого были проанализированы во время индекса.С отображением по умолчанию это то, где поле keyword
sub может помочь.Тип данных keyword
не подвергается анализу (ну, у него есть тип анализа с нормализаторами ), поэтому он может использоваться для точного сопоставления, а также для сортировки и агрегирования.Чтобы использовать его, вам просто нужно нацелиться на поле "city.keyword"
.Альтернативный подход также может состоять в том, чтобы заменить анализатор, используемый полем "city"
, на анализатор, который не использует фильтр токенов в нижнем регистре;При таком подходе потребуется переиндексировать все документы в индексе.