Есть два подхода для решения этой проблемы.
1.Использование сценария:
Рекомендуемое сопоставление:
"mappings": {
"_doc": {
"properties": {
"member_id": {
"type": "integer"
},
"e_id": {
"type": "integer"
},
"c_id": {
"type": "integer"
},
"salary": {
"type": "float"
}
}
}
}
Запрос:
{
"query": {
"bool": {
"filter": {
"script": {
"script": {
"source": "String.valueOf(doc['e_id'].value) + doc['c_id'].value + Math.ceil(doc['salary'].value).intValue() == params.inp",
"lang": "painless",
"params": {
"inp": "12345678"
}
}
}
}
}
}
}
Примечание: Следует избегать использования сценариев, поскольку это приводит к снижению производительности.Я настоятельно рекомендую второй подход ниже.
2.Путем объединения значений во время индекса
Для этого все, что вам нужно сделать, это добавить новое поле с типом данных как keyword
для хранения объединенного значения.Затем используйте term query
для соответствующей фильтрации документов.