Вот проиндексированые атрибуты
'title' => string 'Курица с фасолью и баклажанами '
'content' => string '<p>Филе нарежьте на небольшие кусочки и замаринуйте на время нарезки и обжарки овощей.</p>'
'ingredients' => [1,2,3,4,5]
как мне получить выборку в ингредиентов 1, 2 3 вот так ?
'filtered' => [
'filter' => [
'term' => [
'ingredients' => [
1,2,3
]
]
],
правильно ?
В целом правильно, если у вас первая версия Elasticsearch и нужно выбрать все рецепты в которых совпал хоть один ингредиент 1 или 2 или 3. Начиная со второй filtred объявлен deprecated.
Для второй и пятой версии запрос будет следующим [doc]:
{
"query" : {
"constant_score" : {
"filter" : {
"terms" : {
"ingredients" : [1, 2, 3]
}
}
}
}
}
В любом случае конструкция "terms" : {"ingredients" : [1, 2, 3]} будет работать, неважно в каком контексте. Ссылка на документацию.
Если вам нужна выдача, в которой должны присутствовать все указанные ингредиенты, то нужно использовать bool/must или bool/should вместе с minimum_should_match.
{
"query": {
"bool": {
"must": [
{
"term": {
"ingredients": 1
}
},
{
"term": {
"ingredients": 2
}
},
{
"term": {
"ingredients": 3
}
}
]
}
}
}
Продвижение своими сайтами как стратегия роста и независимости