@Nokyta

Есть ли аналог IN() в ElasticSearch для nested?

Имеется маппинг у продуктов (у продукта может быть несколько категорий):
'categories' => array(
	'properties' => array(
		'category_id' => array(
			'type' => 'string',
			'index' => 'not_analyzed'
		),
		'position' => array(
			'type' => 'integer',
			'index' => 'not_analyzed'
		)
	),
	'type' => 'nested',
),

Т.е. имеем стандартный nested. Также мы имеем массив ИДшников категорий, из которых нам нужны продукты. Вопрос как построить такой запрос? По сути нужен аналог IN() в MySql.

Есть свои идеи:
- на каждый элемент массива (идшник категории) делать новый nested filter и сувать в or, это пугает, а если идшников будет 100?
- заюзать фильтр скрипт. Но почему-то этот вариант не сильно нравится, не затормозится ли такой поиск?
  • Вопрос задан
  • 2877 просмотров
Пригласить эксперта
Ответы на вопрос 1
MintTea
@MintTea
curl -XGET 'http://localhost:9200/index_name/product/_search?pretty' -d '{
    "filter": {
        "nested": {
            "path": "categories",
            "filter": {
                "terms": {
                    "category_id": ["category_one", "category_two"]
                }
            }
        }
    }
}'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы