Вложенные документы в ElasticSearch без типов сопоставления - PullRequest
1 голос
/ 18 февраля 2020

При запланированном удалении типов сопоставления , поступающих в ElasticSearch, означает ли это также устаревание вложенных документов и вложенных запросов? Как / будет ли ElasticSearch поддерживать запросы вложенных объектов в контексте без типа?

Функциональность, которую я рассматриваю, заключается в возможности возврата только совпадений во вложенном массиве, которые соответствуют критериям поиска.

Редактировать 1 : Пример сопоставления + запрос в ElasticSearch версии 6

ElasticSearch 6 Сопоставление

{
    "rec": {
        "mappings": {
            "history": {
                "properties": {
                    "dateCompleted": {
                        "type": "keyword"
                    },
                    "dateCreated": {
                        "type": "keyword"
                    },
                    "dateOrdered": {
                        "type": "keyword"
                    },
                    "dateToArrive": {
                        "type": "keyword"
                    },
                    "details": {
                        "type": "nested",
                        "properties": {

                            "clientId": {
                                "type": "keyword"
                            },
                            "company": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            },
                            "orderNumber": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

ElasticSearch 6 Query

{
  "from": 0,
  "query": {
    "nested": {
      "inner_hits": {},
      "path": "details",
      "query": {
        "bool": {
          "must": [
            {
              "match_phrase": {
                "details.company.keyword": {
                  "query": "ABCD"
                }
              }
            }
          ]
        }
      }
    }
  },
  "size": 10,
  "sort": [],
  "_source": false
}

Ответы [ 2 ]

2 голосов
/ 18 февраля 2020

Нет, удаление _type не влияет на вложенные документы и запросы.

В прошлом люди использовали разные типы в одном индексе для моделирования нескольких объектов. Проблема заключалась в том, что некоторые объекты имели одно и то же поле, но разные поля. Например, «версия», в одном объекте строка, а в другом целое число. Это вызвало проблему, поскольку для этого сценария нет решения.

РЕДАКТИРОВАТЬ: Вложенные объекты - это тип данных отображения для моделирования сложных свойств в документе, подобном этому:

{
  "_id" : "12345",
  "user" : { "login":"foo", "email":"foo@example.com"}
}

Обратите внимание на пользовательский объект внутри самого документа или свойство "details" в вашем отображении выше. Дополнительные примеры доступны здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

Тип документа - это набор свойств, определяющих структуру документа по его отображению.

В прошлом существовал возможность моделирования "автомобиля" и "самолета" в одном указателе с использованием двух типов документов. В текущих версиях есть только один тип документа, в основном с именем _do c, и он будет полностью удален в будущих версиях.

В документации, которую вы связали (удаление типов), есть хороший пример мульти doctype twitter index, определяющий пользователя и твитт doctype в одном индексе

0 голосов
/ 19 февраля 2020

Похоже, что метод GetMapping на клиенте NEST в версиях 7+ перешел на IElasticSearchClient.Indicies.GetFieldMapping. Мое недоразумение состояло в том, что все типы были удалены. В действительности кажется, что план состоит в том, чтобы иметь только один тип для каждого индекса. Спасибо @ibexit за разъяснения.

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