我有2个样本记录如下:
{
"parents": [
{
"child": [
{
"is_deleted": false,
"child_id": -1,
"timestamp": 1483536052232
}
],
"parent_id": 810
},
{
"child": [
{
"is_deleted": true,
"child_id": 105,
"timestamp": 1483537567000
}
],
"parent_id": 42
}
]
},
{
"parents": [
{
"child": [
{
"is_deleted": false,
"child_id": 105,
"timestamp": 1483537567000
}
],
"parent_id": 42
}
]
}
和我的映射:
"properties": {
"parents": {
"type": "nested",
"properties": {
"parent_id": {
"type": "integer",
"doc_values": false
},
"child": {
"type": "nested",
"properties": {
"is_deleted": {
"type": "boolean",
"doc_values": false
},
"child_id": {
"type": "integer",
"doc_values": false
},
"timestamp": {
"type": "long",
"doc_values": false
}
}
}
}
}
我想通过父ID进行搜索,该ID至少有一个is_deleted
为false
的孩子为$.validator.addMethod('validEmail', function(value, element) {
var emailRegex = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
return emailRegex.test(value);
}, i18n.t('Invalid email address'));
。例如,如果我将查询父ID 42,我应该只获得第二个文件。
答案 0 :(得分:1)
您应该使用嵌套查询来查询嵌套字段。
这是一个例子,但我不知道这是否是最好的解决方案,至少它是一个有效的解决方案:
POST /test1/test/_search
{
"query": {
"nested": {
"path": "parents",
"query": {
"bool": {
"must": [
{
"match": {
"parents.parent_id": 42
}
},
{
"nested": {
"path": "parents.child",
"query": {
"term": {
"parents.child.is_deleted": "F"
}
}
}
}
]
}
}
}
}
}