elasticsearch 对搜索结果中的多个类别进行排名

50few1ms  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(2)|浏览(150)

我在显示搜索结果时对不同的类别进行评级时遇到了问题,希望您能帮助我。假设我搜索了“shoes”,而这个词存在于不同的cat中:中鞋男鞋中鞋女鞋中鞋童鞋中鞋运动鞋
我将在搜索结果中显示最多3个类别。在Elasticsearch中,我如何对它们进行评分?或使用哪些因素进行评分?

zysjyyx4

zysjyyx41#

"size": 3,
  "query": {
    "match": {
      "categories": "shoe"
    }
  }
}
lhcgjxsq

lhcgjxsq2#

如果您能提供更多关于您的数据的信息,或者至少您的弹性索引社区中的数据字段可以更有效地帮助您。由于没有更多关于您的数据/索引的信息,我假设您的索引中有两个字段,一个是product_name,它可能包含产品名称和其他详细信息,另一个是category,它当然会包含产品所属的类别。例如-

{
"product_name" : "shoes - Midnight Blue"
"category" : ["Women's Shoes", "Women's Clothing"]    ----> This document belongs to women's category. 
}

现在,据我所知,您正在查找相应类别中product_name以上类别,并希望提供一些权重,因此下面查询将适合您请根据您索引进行测试并在此处提供建议

GET ecommerce_data/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "product_name": "shoes"
        }
      },
      "functions": [
        {
          "filter": {
            "match":{
              "category":"children's"
            }
          },
          "weight": 3
        },
        {
          "filter": {                       -----> Above document will match this filter
            "match":{
              "category":"women's"
            }
          },
          "weight": 2
        },
        {
          "filter": {
            "match":{
              "category":"men's"
            }
          },
          "weight": 1
        }
      ],
      "score_mode": "max",
      "boost_mode": "replace"
    }
  },
  "_source": ["product_name","category"]    -----> Verify with limited fields.
}

相关问题