У нас есть набор данных, как показано ниже в ElasticSearch.Список продуктов, индексируемых из бэкэнда электронной коммерции.
“hts” : [
{
"_index": "test",
"_type": "commerce_products_index",
"_id": "466174",
"_score": 1,
"_source": {
"id": 261776,
"changed": "1516367458",
"commerce_price:amount": "2700",
"field_product_node:nid": [
"66741"
],
"field_uom_type": "g",
"field_weight": "337",
"product_id": "261776",
"title": "Brown Lobia",
}
},
{
"_index": "test",
"_type": "commerce_products_index",
"_id": "466175",
"_score": 1,
"_source": {
"id": 261781,
"changed": "1526448108",
"commerce_price:amount": "5900",
"field_product_node:nid": [
"66741"
],
"field_uom_type": "g",
"field_weight": "339",
"product_id": "261781",
"title": "Brown Lobia",
}
},
{
"_index": "test",
"_type": "commerce_products_index",
"_id": "466176",
"_score": 1,
"_source": {
"id": 466176,
"changed": "1515568794",
"commerce_price:amount": "5400",
"commerce_store": "651",
"field_product_node:nid": [
"84651"
],
"field_uom_type": "g",
"field_weight": "337",
"product_id": "466176",
"title": "Maggi Rich Tomato Ketchup",
}
}
]
Как видите, первые 2 документа имеют field_product_node:nid
.(т.е. 66741).Это два разных размера (варианта) одного и того же продукта.
В поиске мы хотим показать этот же продукт как один.Для этого нам нужен результат с полем field_product_node:nid
, которое будет уникальным для каждого одинакового товара.Например, 1 кг белого риса и 500 г белого риса будут иметь одинаковое значение в field_product_node:nid
.Поэтому при поиске обе детали продукта должны быть сгруппированы по одному nid.
В настоящее время мы получаем разные документы для каждого продукта.Однако мы хотим получить оба продукта как один документ.
Мы попробовали выполнить следующие запросы:
GET /commerce_products_index/_search
{
"size": 20,
"query" : {
"bool": {
"must": [
{ "match": { "commerce_store": "651"}}
]
}
},
"aggs": {
"group_by_node": {
"terms": {
"field": "field_product_node:nid"
}
}
}
}
GET /commerce_products_index/_search
{
"aggregations": {
"grp_report": {
"terms": {
"field": "field_product_node:nid"
},
"aggregations": {
"nested_node": {
"nested": {
"path": "node"
},
"aggregations": {
"filters_customer": {
"filters": {
"filters": [
{
"match": {
"node.commerce_store": "651"
}
}
]
}
}
}
}
}
}
},
"query" : {
"bool": {
"must": [
{ "match": { "commerce_store": "651"}}
]
}
},
"from": 0,
"size": 100
}
Мы не можем найти правильный метод.Если это невозможно, мы должны перестроить часть индексации и попробовать проиндексировать несколько продуктов с одинаковым nid в одном документе.Это будет значительное переписать.