У меня есть индекс с отображениями:Elasticsearch BOOL обратный фильтр результатов запроса
[test] => Array
(
[mappings] => Array
(
[testype] => Array
(
[properties] => Array
(
[brand_id] => Array
(
[type] => integer
)
[color] => Array
(
[type] => string
[index] => not_analyzed
)
[description] => Array
(
[type] => string
)
[discount] => Array
(
[type] => float
)
[newprice] => Array
(
[type] => float
)
[oldprice] => Array
(
[type] => float
)
[sex] => Array
(
[type] => string
[index] => not_analyzed
)
[store_id] => Array
(
[type] => integer
)
[title] => Array
(
[type] => string
)
)
)
)
)
И пытается фильтровать данные с этим запросом:
Array
(
[index] => test
[type] => testype
[size] => 100
[body] => Array
(
[query] => Array
(
[filtered] => Array
(
[filter] => Array
(
[bool] => Array
(
[must] => Array
(
[term] => Array
(
[brand_id] => 53
[color] => red
)
)
)
)
)
)
)
)
Ожидая, чтобы получить результат, как SELECT ... WHERE brand_id = 53 И цвет = красный, но есть результаты, такие как brand_id = 53 OR color = red. Мне что-то не хватает?
Фактически, я хочу иметь такой фильтр, как SELECT ... WHERE aaaa = 'a' AND bbbb = 'b' AND cccc IN (1,2,6,9) И ddd IN (xxx, yyy)
Большое спасибо, вот у меня работает. Могу ли я попросить вас объяснить, что если я не предоставил [minimum_should_match] => 1, потому что это без него, как мне кажется. – oleg
Вы правы, значение по умолчанию 'minimum_should_match' по умолчанию равно 1. Но я предпочитаю явно указывать его, чтобы избежать путаницы. –
Спасибо за помощь. – oleg