Как организовать запрос ElasticSearch?

298
19 августа 2017, 02:58

Вот проиндексированые атрибуты

'title' => string 'Курица с фасолью и баклажанами '
'content' => string '<p>Филе нарежьте на небольшие кусочки и замаринуйте на время нарезки и обжарки овощей.</p>'
'ingredients' => [1,2,3,4,5]

как мне получить выборку в ингредиентов 1, 2 3 вот так ?

'filtered' => [
    'filter' => [
        'term' => [
            'ingredients' => [
                1,2,3
            ]
        ]
    ],

правильно ?

Answer 1

В целом правильно, если у вас первая версия 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
                    }
                }
            ]
        }
    }
}
READ ALSO
Как правильно делить приложение?

Как правильно делить приложение?

Хочу делать всё правильно, потому интересуюсьЕсть контроллер SiteController с actionRegistration, который отображает страницу регистрации

291
Улучшить производительность php функций [startWith, endWIth]

Улучшить производительность php функций [startWith, endWIth]

Есть функции, которые проверяют начинается или заканчивается ли строка другой подстрокой:

313
Ошибка в форме отправки

Ошибка в форме отправки

Есть сайт - ТЫК

293
Wordpress CMS изменение контента

Wordpress CMS изменение контента

Так есть изменить там надо кое чтоПароль и логин есть cpanel

236