Сбой запроса Elasticsearch со смешанным числом и строкой multi_match - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь создать запрос, в котором я могу принять строку, содержащую строки и числа, и искать эти значения в полях моего индекса, которые содержат двойные значения и строки. Например:

Поля: Double doubleVal, String stringVal0, String stringVal1, String doNotSearchVal

Пример строки поиска: "person 10"

Я пытаюсь получить все документы, содержащие"person" или "10" в любом из полей doubleVal, stringVal0 и stringVal1. Это мой пример запроса:

{
    "query": {
      "multi_match" : {
        "query": "person 10",
        "fields" : [
          "doubleVal^1.0",
          "stringVal0^1.0",
          "stringVal1^1.0"
        ],
        "type" : "best_fields",
        "operator" : "OR",
        "slop" : 0,
        "prefix_length" : 0,
        "max_expansions" : 50,
        "zero_terms_query" : "NONE",
        "auto_generate_synonyms_phrase_query" : true,
        "fuzzy_transpositions" : true,
        "boost" : 1.0
      }
    }
}

(Этот запрос был создан Spring Data Elastic)

Когда я запускаю этот запрос, я получаю эту ошибку: (Я удалил любую идентифицирующую информацию)

{
    "error": {
        "root_cause": [
            {
                "type": "query_shard_exception",
                "reason": "failed to create query: [query removed]",
                "index_uuid": "index_uuid",
                "index": "index_name"
            }
        ],
        "type": "search_phase_execution_exception",
        "reason": "all shards failed",
        "phase": "query",
        "grouped": true,
        "failed_shards": [
            {
                "shard": 0,
                "index": "index_name",
                "node": "node_value",
                "reason": {
                    "type": "query_shard_exception",
                    "reason": "failed to create query: [query removed]",
                    "index_uuid": "index_uuid",
                    "index": "index_name",
                    "caused_by": {
                        "type": "number_format_exception",
                        "reason": "For input string: \"person 10\""
                    }
                }
            }
        ]
    },
    "status": 400
}

Я не хочу разбивать строку поиска. Если есть способ переписать запрос так, чтобы он работал ожидаемым образом, я бы хотел сделать это таким образом.

1 Ответ

0 голосов
/ 13 октября 2019

Вы должны попытаться установить для параметра lenient значение true, тогда ошибки на основе форматирования, такие как предоставление значения текстового запроса для числового поля, будут игнорироваться

Этого можно достичь веснойДанные с использованием метода построителя, как это:

.lenient(true)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...