Получение Copy_to / Сохраненных полей - PullRequest
0 голосов
/ 18 октября 2019

Я создал поле copy_to как существующее поле, изменив его отображение ниже:

{
  "properties": {
    "ExistingField": {
      "type": "date",
      "copy_to": "CopiedField"
    },
    "CopiedField": {
      "type": "date",
      "store": true
    }
  }
}

Я использовал «store»: «true», так как я хотел, чтобы это новое значение поля было получено, когдаЯ делаю поиск. Агрегаты с «CopiedField» работают нормально, но когда я пытаюсь найти значение в этом новом CopiedField, я не вижу ничего извлекаемого:

{
  "stored_fields": [
      "CopiedField"
     ],
  "query": {
  "match_all": {}
  }
}

Как получить значение этого «CopiedField» впростой поиск?

1 Ответ

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

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

  1. (отображение) [https://www.elastic.co/blog/changing-mapping-with-zero-downtime]
  2. (переиндексирование) [https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html]
  3. (Псевдоним) [https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html] отл.

Старый индекс index35 с отображением ниже

PUT index35
{
  "mappings": {
  "properties": {
    "ExistingField": {
      "type": "date"
    }
  }
 }
}

Запрос: запрос ниже ничего не даст

GET index35/_search
{
  "stored_fields": [
    "CopiedField"
  ],
  "query": {
    "match_all": {}
  }
}

Создать новый индекс

PUT index36
{
  "mappings": {
    "properties": {
      "ExistingField": {
        "type": "date",
        "copy_to": "CopiedField"
      },
      "CopiedField": {
        "type": "date",
        "store": true
      }
    }
  }
}

Переместить старые документы в новые документы

POST _reindex
{
  "source": {
    "index": "index35"
  },
  "dest": {
    "index": "index36"  ----> must be created before reindex
  }
}

Убедитесь, что количество документов одинаково как в старом, так и в новом индексе (для предотвращения потери данных)

Удалить староеindex: -DELETE index35

Создать псевдоним для нового индекса (дать старое имя), чтобы поисковые запросы не затрагивались

POST /_aliases
{
    "actions" : [
        { "add" : { "index" : "index36", "alias" : "index35" } }
    ]
}

Старый запрос теперь будет возвращать результаты

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