ElasticSearch 6.2 — сопоставление документов на основе нескольких значений полей (вложенных)

Я разрабатываю проект с использованием эластичного поиска v6.2 cloud.

  • У меня есть индекс, содержащий продукты.
  • Каждый продукт имеет вложенный набор полей, называемых атрибутами.
  • Не все атрибуты будут иметь значение

Что мне нужно сделать, это выполнить запрос к индексу, используя подмножество полей атрибута, чтобы получить все продукты, соответствующие этим атрибутам.

На момент выполнения запроса у меня есть один документ, как показано ниже.

Array
(
[_index] => bso
[_type] => products
[_id] => w_jXC2MBFFPgsYVIITy9
[_score] => 1
[_source] => Array
(
[ean] =>
[name] => dewalt d25013k sds+ combi hammer drill 3 mode with case 110 volt
[name_search] => dewalt d25013k sds+ combi hammer drill 3 mode with case 110 volt
[category] => diy
[price] => 90.9
[brand] => bso
[brand_search] => bso
[description] =>
[aff_url] => https://www.awin1.com/pclick.php?p=3079325009&a=475527&m=3811
[images] => http://www.building-supplies-online.co.uk/media/catalog/product
[attributes] => Array
(
[power_rating] => 110
[blade_size] =>
[blade_type] =>
[bulb_type] =>
[colour] =>
[depth] =>
[diameter] =>
[dimmable] =>
[energy_rating] =>
[fitting] =>
[handle_diameter] =>
[handle_length] =>
[handle_material] =>
[handle_type] => sds
[height] =>
[length] =>
[capacity] =>
[material] =>
[model] => d25013k
[pack_quantity] =>
[shape] =>
[bolt_head] =>
[screwdriver_type] =>
[sizes] =>
[finish] =>
[surface_finish] =>
[thickness] =>
[timber_type] =>
[water_resistant] =>
[weight] =>
[width] =>
)

[vendor] => bso
[matched] => 0
)

)

Я буду собирать все атрибуты, которые имеют значение, и это те данные, к которым я буду обращаться.

Я хочу найти те же продукты, но другие продукты могут не иметь такие же атрибуты, только некоторые. например другой продукт может иметь только атрибуты model и power_rating.

У меня пока это есть, но оно соответствует многим другим продуктам, основанным только на одном атрибуте, например он будет тянуть все продукты, которые имеют 110 В power_rating, не заботясь о других атрибутах.

Вот что у меня так далеко

curl -XGET 'https://user:[email protected]:9243/bso/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"nested" : {
"path" : "attributes",
"query" : {
"bool": {
"should": [
{
"term": {"attributes.power_rating": "110"}
},
{
"term": { "attributes.model": "d25013k"}
}
]
}
}
}
}
}
'

Это должно соответствовать двум продуктам, но 4 возвращаются.

Короче говоря, как мне точно сопоставить ИЛИ пустое с несколькими вложенными полями вasticsearch 6.2?

Надеюсь, в этом есть какой-то смысл.
Спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]