фон:Как определить недостающие документы в ElasticSearch?
В моем индексе ElasticSearch, у меня есть два типа документов, которые могут быть определены как «bvi_ship» и «bvi_notify». Каждый документ, который идентифицируется как «bvi_ship», должен также иметь соответствующий документ, идентифицированный как «bvi_notify».
Вопрос:
Что является подходящим способом идентификации документов «bvi_ship», которые не имеют «bvi_notify» документ?
Использование Facet:
Я был в состоянии определить необходимые документы, используя следующий код: граненый
{
"size":0,
"query":{
"filtered":{
"query":{
"query_string":{
"default_operator":"OR",
"default_field":"_all",
"query":"@fields.action:\"bv_ship\" OR @fields.action:\"bvi_notify\""
}
}
}
},
"facets":{
"terms":{
"terms":{
"field":[
"@fields.object"
],
"size":1000
}
}
}
}
который возвращает результаты, которые выглядят следующим образом:
{
"took" : 147,
...
},
"hits" : {
...
},
"facets" : {
"terms" : {
...
"terms" : [ {
"term" : "xml",
"count" : 1443
}, {
"term" : "content_ff47d2d096ea4510ac0895941666e507",
"count" : 2
}, {
"term" : "content_fa525becb2724b7682df278c02fed308",
"count" : 2
},
... THOUSANDS OF RECORDS WITH COUNT of 2
}, {
"term" : "content_f1ff2f7440534a08bad4c62b92165949",
"count" : 1
} ]
}
}
}
Это может работать хорошо, но я, очевидно, не хочу возвращать t которые имеют счет 2, когда меня действительно интересуют только записи, которые имеют счет 1.
Есть ли способ ограничить грань поиска, чтобы он возвращал только записи со счетом 1 ?
Использование фильтра:
Я предполагаю, что я должен быть в состоянии быть более точным в моем запросе и просто выбрать соответствующие записи, используя комбинацию запросов и фильтров, хотя мой ElasticSearch Kung-Fu это время инвалид моей реляционной базы данных каратэ.
Я думал о взаимоотношениях между родителями и детьми, к сожалению, я не имею прямого контроля над тем, как документы индексируются, кроме предоставления основных параметров. Благодарим за идею обратного_сочетания, а также о том, почему они могут быть неверными. –