Я работаю над переводом нашей поисковой системы на 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?