我的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个结果。
最佳答案
尝试在您的初始“必须”子句中按条件使用嵌套查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "form_data",
"query": {
"bool": {
"must": [
{ "term": { "form_data.name": "applicant_name" } },
{ "match": { "form_data.value": "Joe" } }
]
}
}
}
},
{
"nested": {
"path": "form_data",
"query": {
"bool": {
"must": [
{ "term": { "form_data.name": "pet_type" } },
{ "match": { "form_data.value": "dog" } }
]
}
}
}
}
]
}
}
}
关于elasticsearch - 如何在ElasticSearch中的数组中搜索单独的键和值字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091416/