Как я могу создать сопоставление для двух типов в ElasticSearch? - PullRequest
0 голосов
/ 27 декабря 2018

Я хотел бы проиндексировать идентификаторы пользователей и теги.

Я отправляю запрос PUT на https://ip//elasticsearch/myIndex

{ 
  "mappings" : {
    "users" : {
      "properties" : {
        "id" : {"type": "keyword" }
      }
    },
    "tags" : {
      "properties" : {
        "id" : {"type": "keyword" }
      }
    }
  }
}

Однако я получаю этот ответ:

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Rejecting mapping update to [myIndex] as the final mapping would have more than 1 type: [users, tags]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Rejecting mapping update to [myIndex] as the final mapping would have more than 1 type: [users, tags]"
    },
    "status": 400
}

Как я могу решить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Как указано @ ben5556, вы можете иметь только один тип для индекса вasticsearch 6+.Тем не менее, вы можете имитировать несколько типов для каждого индекса, добавив свое собственное поле типа.

{ "mappings" : { "ids" : { "properties" : { "id" : {"type": "keyword" } "type": {"type": "keyword" } } } } }

Затем, когда вы индексируете документ, вы включаете «тип»:

{ "type": "user", "id": "12345" }

Это позволит вам выполнять фильтрацию по типу при запросе индекса (с помощью termQuery).В любом случае, все из-за эластичного поиска действительно было закулисным для вас, когда он поддерживал несколько типов.

0 голосов
/ 27 декабря 2018

В Elastic 6.x вы не можете иметь более 1 типа отображения.Используйте один тип отображения.Вместо этого используйте поле настраиваемого типа.См. эту ссылку, а также эту ссылку.

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