Мои документы ElasticSearch содержат вложенную коллекцию полей формы. Каждое поле имеет имя и значение, и отображение выглядит следующим образом:
form: {
properties: {
id: { type: 'integer' },
name: { type: 'text' },
form_data: {
type: 'nested',
properties: {
'name': { type: 'keyword' },
'value': { type: 'text', analyzer: 'full_text_analyzer' }
}
}
}
}
Мне нужно разрешить пользователю выполнять поиск по нескольким полям формы для уточнения поиска. Они могут выбрать, по каким полям искать, и присвоить значение каждому из них. Например
applicant_name = 'Joe'
pet_type = 'dog'
При этом будут найдены все документы, которые содержат поле с именем applicant_name
, имеющее нечеткое совпадение значений Joe
, а также поле с именем pet_type
и нечеткое совпадение значений dog
.
Запрос, с которым я пытаюсь это сделать, выглядит следующим образом .:
{
"query": {
"bool": {
"must": [{
"nested": {
"path": "form_data",
"query": {
"filter": {
"bool": {
"must": [
{
"bool": {
"must": [
{ "term": { "form_data.name": "applicant_name" } },
{ "match": { "form_data.value": "Joe" } }
]
}
},
{
"bool": {
"must": [
{ "term": { "form_data.name": "pet_type" } },
{ "match": { "form_data.value": "dog" } }
]
}
}
]
}
}
}
}
}]
}
}
}
Однако я получаю 0 результатов.