Выполнить запрос по регулярному выражению в поле _id в Elasticsearch - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь выполнить запрос регулярного выражения в поиске Elasti c, основанный на поле с именем _id, но получаю эту ошибку:

Можно использовать только символы подстановки для ключевые слова и текстовые поля - не в [_id] типа [_id]

Я пробовал regexp:

{
    "query": {
        "regexp": {
            "_id": {
                "value": "test-product-all-user_.*",
                "flags" : "ALL",
                "max_determinized_states": 10000,
                "rewrite": "constant_score"
            }
        }
    }
}

и wildcard:

{
    "query": {
        "wildcard": {
            "_id": {
                "value": "test-product-all-user_.*",
                "boost": 1.0,
                "rewrite": "constant_score"
            }
        }
    }
}

Но оба выдали одну и ту же ошибку.

Это полная ошибка на всякий случай:

{   "error": {
    "root_cause": [
      {
        "type": "query_shard_exception",
        "reason": "Can only use wildcard queries on keyword and text fields - not on [_id] which is of type [_id]",
        "index_uuid": "Cg0zrr6dRZeHJ8Jmvh5HMg",
        "index": "explore_segments_v3"
      }
    ],
    "type": "search_phase_execution_exception",
    "reason": "all shards failed",
    "phase": "query",
    "grouped": true,
    "failed_shards": [
      {
        "shard": 0,
        "index": "explore_segments_v3",
        "node": "-ecTRBmnS2OgjHrrq6GCOw",
        "reason": {
          "type": "query_shard_exception",
          "reason": "Can only use wildcard queries on keyword and text fields - not on [_id] which is of type [_id]",
          "index_uuid": "Cg0zrr6dRZeHJ8Jmvh5HMg",
          "index": "explore_segments_v3"
        }
      }
    ]   },   "status": 400 }

1 Ответ

0 голосов
/ 23 апреля 2020

_id - это особый тип поля в Elasticsearch. Он не является индексированным полем, как другие текстовые поля, он фактически «генерируется» на основе UID документа.

Вы можете обратиться к этой ссылке для получения дополнительной информации https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html

Согласно документации, она поддерживает только ограниченный тип запросов (термин, термины, совпадение, query_string, simple_query_string), и если вы хотите выполнить более сложный текстовый поиск, такой как подстановочный знак или регулярное выражение, вам нужно будет индексировать идентификатор в фактическом текстовом поле самого документа.

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