Использование условных логик c при индексации в Elasticsearch - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю над переводом нашей поисковой системы на Elasticsearch и столкнулся с проблемой при индексации по условным критериям.

В нашем старом коде у нас есть отдельные поля плюс поле коллективного поиска. У меня есть данные, которые всегда должны быть включены в отдельное поле, но будут скопированы в общее поле только при определенных условиях. Ранее все это было написано в Java внутреннем коде, а затем опубликовано в Lucene. Сейчас я пытаюсь реализовать эту логику c с использованием динамических c шаблонов в Elasticsearch 7.6, но не могу найти способ добавить условную логи c.

Пример без условной логи c:

"mappings": {
  "dynamic_templates": [
    {
      "languageDescriptionText": {
        "path_match": "desc.*",
        "mapping": {
          "copy_to": "allField_{name}"
        }
      }
    }
  ],
  "properties": {
    "desc": {
      "type": "nested",
      "properties": {
        "de": {
          "type": "keyword"
        }
      }
    }
  }
}

Приведенный выше код найдет поле "des c .de" и скопирует текст в поле "allField_de".

Это отлично работает, но что делать, если текст следует копировать только в «allField_de», когда содержимое «des c .de» начинается с «copyMe»? Можно ли реализовать такие логи c direct в Elasticsearch, либо с помощью динамических c шаблонов, либо как-то еще? Если да, возможно ли также копировать одно поле на основе флага, установленного другим полем? Например, если было булево поле с именем «shouldCopy», могу ли я как-то установить сопоставления так, чтобы «des c .de» копировался в «allField_de» только в том случае, если «des c .de» начинается с «copyMe» "И" mustCopy "= true?

...