You need to enable JavaScript to run this app.
导航
体验类目预测
最近更新时间:2024.07.03 19:47:46首次发布时间:2024.05.15 16:38:09

云搜索服务支持添加类目预测词条,通过人工干预来提升检索结果的准确度。本文通过简单示例,演示类目预测的使用方式。

背景信息

在普通的用户检索场景中,输入搜索词,返回的结果中水库鱼头卤水豆腐靠前,而XX矿泉水却排在后面,影响用户检索体验。
为解决上述问题,可以添加类目预测词条,将关注的类目相关度提高。后续检索过程在计算每个物品的排序分时,目标类目物品的得分高,将会排在更前面,从而提高了搜索的业务价值。

使用类目预测前

使用类目预测后

未使用类目预测时,查询结果得分排名为:水库鱼头>卤水豆腐>XX矿泉水
图片

使用类目预测后,查询结果得分排名为:XX矿泉水>卤水豆腐>水库鱼头。
图片

注意事项

  • 仅 OpneSearch 实例支持类目预测干预功能。
  • 使用类目预测前,需要先安装类目预测插件,请参见安装类目预测插件

场景一:未使用类目预测

当您不使用类目预测时,在普通查询时,您所关注的类目往往排名较靠后。

  1. 创建索引并写入数据。

    1. 通过公网访问 Dashboards。具体步骤,请参见公网访问 Kibana/Dashboards

    2. 在页面左侧菜单,选择 Management > Dev Tools,进入开发工具页面。

    3. 定义索引 mapping。

      PUT  /index-test-1
      {  
         "mappings":{
              "properties":  { 
                  "name":  {"type": "text"},
                  "category":  {"type": "keyword"},
                  "price": {"type": "integer"},
                  "date":{ "type": "date","format":"yyyy-MM-dd"}
                  }
              }  
      }
      
    4. 批量写入文档。

      POST _bulk
      {"index" : { "_index": "index-test-1","_id":1} }
      {"name":"水库鱼头","category":"鱼","price":"25","date":"2024-05-10"}
      {"index" : { "_index": "index-test-1","_id":2} }
      {"name":"卤水豆腐","category":"豆腐","price":"3","date":"2024-05-11"}
      {"index" : { "_index": "index-test-1","_id":3} }
      {"name":"XX矿泉水","category":"矿泉水","price":"2","date":"2025-05-10"}
      
  2. 通过关键字检索。

    GET /index-test-1/_search
    {
      "query": {
        "match": {
          "name": "水"
        }
      }
    }
    

    从返回结果中得到的排名为:水库鱼头>卤水豆腐>XX矿泉水。
    图片

场景二:使用类目预测

当您添加类目预测词条,提升搜索词关联的类目相关度,再次查询时,您所关注的类目排名将会更靠前。

  1. 创建索引并写入数据。
    参考场景一创建索引index-test-2并写入相同数据。

  2. 配置并生效类目预测词条。具体操作,请参见添加类目预测词条

    • 搜索词:水
    • 字段类目关联度:category > 矿泉水 > 权重大于1
    • 关联词相关度:鱼头 > 权重小于1
      图片
  3. 配置搜索管道,并添加预处理器。
    以下命令表示:创建一个名为search_intervention_pipeline的搜索管道,向该管道添加了一个名为query_rewrite的请求处理器,并将其配置为空对象{}
    按以下配置后,在搜索请求执行之前将对查询进行重写操作。

    PUT _search/pipeline/search_intervention_pipeline
    {
        "request_processors": [
            {
                "query_rewrite": {}
            }
        ]
    }
    
  4. 指定搜索管道,然后根据关键字查询。

    GET /index-test-2/_search?search_pipeline=search_intervention_pipeline
    {
      "query": {
        "match": {
          "name": "水"
        }
      }
    }
    

    从返回结果中得到的排名为:XX矿泉水>水库鱼头>卤水豆腐。
    图片