通过pack索引实现文本相关性排序

场景说明

本文主要介绍,如何在向量检索版中使用static_bm25函数、text_relevance函数在粗排和精排阶段获取文本相关性得分并排序。

pack索引配置

这里通过演示2个字段组合pack:

首先,需要设置pack索引的两个字段,类型设置为text,同时分析方式需要相同:

image.png

然后,设置索引,索引类型设置PACK,设置包含字段:

image.png

这里需要注意,如果上述设置字段时,顺序为vector_source_text在前、cate_id在后,那么编辑pack索引的字段时,也需要按照这个顺序,否则在保存发布时会报错

接下来,设置pack索引的高级配置:

image.png

pack索引配置示例:

{
      "index_name": "pack_index",
      "index_type": "PACK",
      "index_fields": [
        {
          "boost": 1,
          "field_name": "vector_source_text"
        },
        {
          "boost": 1,
          "field_name": "cate_id"
        }
      ],
      "doc_payload_flag": 1,
      "has_section_attribute": true,
      "position_payload_flag": 1,
      "term_frequency_bitmap": 0,
      "position_list_flag": 1,
      "term_payload_flag": 1,
      "term_frequency_flag": 1,
      "section_attribute_config": {
        "has_field_id": true,
        "has_section_weight": true
      }
    }

最后,点击发布即可。

发布完成后,推送离线配置,并索引重建,即可进行查询测试

查询配置

通过ha语法进行查询:

query=pack_index:'水 壶'&&cluster=general&&config=start:0,hit:10,format:json
&&kvpairs=first_formula:static_bm25(),
formula: text_relevance(vector_source_text)&&sort=-RANK

first_formula设置粗排表达式

●formula设置精排表达式

●sort=-RANK 设置doc使用文本得分排序

结果展示:

image

算分信息查看:(在config子句中添加rank_trace:all)

image.png

常见问题

用户反馈:

粗排配置没问题,但是得分一直是10000: image

config里加一个参数:rank_trace:all

"tracerInfo": "begin first formula trace:\nexpression[ipvuv], 
result[8819].\nexpression[ipvuv*0.1], result[881.900024].\nexpression[score], 
  result[97.910000].\nexpression[score*100], 
  result[9791.000000].\nexpression[score*100+ipvuv*0.1], 
  result[10672.900024].\nscore [10000.000000] is larger 
  than max_first_score [10000.000000], adjust it to max_first_score.\nend 
first formula trace.\n"

这是因为粗排最大是10000分,超过10000,则默认设置为10000。