Elasticsearch комплексный фильтр
Я использую поиск упругого поиска, чтобы получить какой-то документ, и я хотел бы сделать простое утверждение, как:
if ((a == "1" || b == "2") || (c == "3" && d == "4"))
Я использую первое утверждение ((a == "1" || b == "2")) с этим
$filter ['bool'] ['must'] [] = array (
'bool' => array (
'should' => array (
array (
'terms' => array (
'a' => $aName
)
),
array (
'terms' => array (
'b' => $bName
)
),
),
)
);
Но после того, как я потерялся. Я не знаю, как я могу добавить:
(c == "3" && d == "4")
1 ответ
Посмотрите на вложенные логические фильтры. Для вашего случая я считаю, что что-то вроде этого будет работать:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"bool": {
"should": [
{
"term": {
"a": 1
}
},
{
"bool": {
"must": {
"term": {
"b": 2
}
}
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"c": 3
}
},
{
"term": {
"d": 4
}
}
]
}
}
]
}
}
}
}
}
Преобразование его обратно в php должно быть легко отсюда.