mongoose 如何在ElasticSearch中沿着搜索查询返回可用过滤器

lnlaulya  于 2022-11-30  发布在  Go
关注(0)|答案(1)|浏览(114)

基本上,我对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",
     }
      .
      .
      .
      ]
}

基本上存储每个变量作为单独的产品标题和描述,所以搜索是快速和容易的

zbsbpyhn

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

相关问题