基本上,我对ElasticSearch很陌生,需要一些查询方面的帮助。如果我需要对MongoDB模式做任何更改,请告诉我
我想知道我如何在ElasticSearch中搜索,这将给我提供基于查询和过滤器的可用产品
比如
{
products: [{...}, {...}, ...],
filters: [ ... ]
}
产品架构为
{
title: "...",
description: "...",
categoryId: ObjectId
variants: [ variant1ID, variant2ID ],
... other miscellaneous stuff
}
变量架构为
{
product : objectId,
image: ..,
price: ...,
attributes:[
"SIZE-XL", // note: these are facetId , i can popuplate these to {name:"SIZE", value:"XL"}
"COLOR-BLUE",
....and so on
]
}
首先我教了基于类别的检索过滤器,因为每个类别都有固定数量的方面,然后我意识到,搜索查询并不真的必须特定于类别,
我也在考虑存储产品在弹性在下面的格式
{
productId: "...",
title:"..",
description: "...",
categoryId: "....",
image: "..",
variantId:"..."
price:"..",
attributes: [
{
name:"SIZE",
value:"XL",
},
{
name:"COLOR",
value:"BLUE",
}
.
.
.
]
}
基本上存储每个变量作为单独的产品标题和描述,所以搜索是快速和容易的
1条答案
按热度按时间zbsbpyhn1#
你是对的。在Elasticsearch中,你想避免使用填充/连接,你想扁平化/去规范化你的数据。
您可以阅读这篇文章,以更好地了解建模变体:
https://www.elastic.co/blog/how-to-create-a-document-schema-for-product-variants-and-skus-for-your-ecommerce-search-experience
只要该字段的关键字类型存在(默认情况下存在),您就可以创建一个查询来返回所需的任何方面。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
然后您可以执行筛选查询:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html#filter-context
您希望在筛选器中使用“术语”查询,因为在大多数情况下,筛选器是完全匹配的(UI中的复选框),因此这是最有效的方法:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html