почему регистр не работает вasticSearch - PullRequest
2 голосов
/ 03 марта 2020

Я хочу использовать регистр символов в Elasticsearch query_string

query_string: {
      default_field : 'message',
      query: 'info',
    }

Если я введу info, вывод будет отображаться info, а также INFO.

Как использовать регистр символов в Elasticsearch query_string?

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Строки запроса не приветствуются для панели поиска или обычного полнотекстового поиска, как указано в Официальный 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"
                }
            }
        ]
0 голосов
/ 03 марта 2020

Вы можете попробовать использовать поле «message.keyword», если ваше отображение установило «message» в качестве анализируемого поля. Это приведет к поиску с учетом регистра.

0 голосов
/ 03 марта 2020

Это все о вашем шаблоне, типе вашего поля и его анализе. Вы можете проверить ниже для более подробной информации:

https://discuss.elastic.co/t/is-elasticsearch-querying-on-a-field-value-case-sensitive/74005

...