Строки запроса не приветствуются для панели поиска или обычного полнотекстового поиска, как указано в Официальный ES do c. По той же ссылке:
Поскольку он возвращает ошибку для любого неверного синтаксиса, мы не рекомендуем использовать запрос query_string для полей поиска.
Если вам не нужно поддерживать синтаксис запроса, рассмотрите возможность использования запроса на совпадение. Если вам нужны функции синтаксиса запроса, используйте запрос simple_query_string, который является менее строгим.
Я бы предложил использовать запрос match
, как рекомендовано выше, который анализируется и обеспечивает поиск без учета регистра на текстовых полях. Таким образом, в вашем примере вы можете определить отображение следующим образом:
"mappings": {
"properties": {
"message": {
"type": "text" --> note `text` type which uses `standard` analyzer
}
}
}
Пример данных индекса (обратите внимание, что документы чувствительны к регистру)
{
"message": "foo"
}
{
"message": "Foo"
}
{
"message": "FOO"
}
А затем используйте следующий запрос для запроса данных:
{
"query": {
"bool": {
"must": [
{
"match": {
"message": "foo" -->you can change it to `Foo` and it will still give all results.
}
}
]
}
}
}
И он дает все результаты, как показано ниже:
"hits": [
{
"_index": "querystring",
"_type": "_doc",
"_id": "1",
"_score": 0.13353139,
"_source": {
"message": "FOO"
}
},
{
"_index": "querystring",
"_type": "_doc",
"_id": "2",
"_score": 0.13353139,
"_source": {
"message": "Foo"
}
},
{
"_index": "querystring",
"_type": "_doc",
"_id": "3",
"_score": 0.13353139,
"_source": {
"message": "foo"
}
}
]