У меня проблемы с созданием запроса ElasticSearch для моего текущего набора данных / отображения. Мое текущее сопоставление:
"products": {
"mappings": {
"properties": {
"active": {
"type": "long"
},
"attributes": {
"properties": {
"created_at": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"id": {
"type": "long"
},
"language_code": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"product_column_id": {
"type": "long"
},
"product_id": {
"type": "long"
},
"value": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
},
}
"id": {
"type": "long"
},
"published": {
"type": "long"
}
},
Я хочу запросить свой набор данных (продукты), чтобы я мог выбрать все продукты с определенными атрибутами. Каждый атрибут должен соответствовать нескольким критериям. Пример:
Получить все продукты, имеющие хотя бы атрибут, с product_column_id = 2 AND value = '3'.
Я перепробовал все, о чем я могу думать / читать, например:
'bool' => [
'must' => [
[
'match' => [
'attributes.product_column_id' => 2
]
],
[
'match' => [
'attributes.value' => '3'
]
],
]
]
Я также пытался использовать фильтры:
'bool' => [
'filter' => [
[
'match' => [
'attributes.product_column_id' => 2
]
],
[
'match' => [
'attributes.value' => '3'
]
],
]
]
Но все же я получаю все продукты, содержащие атрибуты со значением 4, без правильного product_column_id (он ищет термин "4" во всем значении поле не совпадает.
Я использую PHP / Laravel / Elasticquent для форматирования своих запросов, но это не должно иметь значения.
Может кто-нибудь сказать мне, как отформатировать запрос сопоставлять товары, содержащие атрибуты, которые соответствуют не только значению, но и product_column_id (и на будущее: language_code)?
Спасибо!