使用跨编码器模型重排搜索结果

您可以使用跨编码器模型对搜索结果进行重排,以提高搜索相关性。要实现重排,需要配置一个在搜索时运行的搜索管道。该搜索管道会拦截搜索结果,并对它们应用rerank处理器rerank处理器评估搜索结果,并根据跨编码器模型提供的新分数对其进行排序。

先决条件
在配置重排管道之前,必须先设置跨编码器模型。有关使用 UDB-SX 提供的模型的信息,请参阅跨编码器模型。有关使用自定义模型的信息,请参阅

运行带重排的搜索

要运行带重排的搜索,请按照以下步骤操作:

  1. 配置搜索管道

  2. 创建用于数据摄入的索引

  3. 将文档摄入到索引中

  4. 使用重排进行搜索

步骤 1:配置搜索管道

接下来,配置一个带有rerank处理器的搜索管道,并指定 ml_opensearch 重排类型。在请求中,提供跨编码器模型的模型 ID 以及用作上下文的文档字段:

PUT /_search/pipeline/my_pipeline
{
  "description": "使用跨编码器进行重排的管道",
  "response_processors": [
    {
      "rerank": {
        "ml_opensearch": {
          "model_id": "gnDIbI0BfUsSoeNT_jAw"
        },
        "context": {
          "document_fields": [
            "passage_text"
          ]
        }
      }
    }
  ]
}

有关请求字段的更多信息,请参阅请求字段

步骤 2:创建用于数据摄入的索引

为了使用管道中定义的 rerank 处理器,请创建一个 UDB-SX 索引,并将上一步创建的管道添加为默认管道:

PUT /my-index
{
  "settings": {
    "index.search.default_pipeline" : "my_pipeline"
  },
  "mappings": {
    "properties": {
      "passage_text": {
        "type": "text"
      }
    }
  }
}

步骤 3:将文档摄入到索引中

要将文档摄入到上一步创建的索引中,发送以下批量请求:

POST /_bulk
{ "index": { "_index": "my-index" } }
{ "passage_text" : "I said welcome to them and we entered the house" }
{ "index": { "_index": "my-index" } }
{ "passage_text" : "I feel welcomed in their family" }
{ "index": { "_index": "my-index" } }
{ "passage_text" : "Welcoming gifts are great" }

步骤 4:使用重排进行搜索

要在您的索引上执行重排搜索,请使用任何 UDB-SX 查询,并提供一个额外的 ext.rerank 字段:

POST /my-index/_search
{
  "query": {
    "match": {
      "passage_text": "how to welcome in family"
    }
  },
  "ext": {
    "rerank": {
      "query_context": {
         "query_text": "how to welcome in family"
      }
    }
  }
}

或者,您可以提供包含上下文字段的完整路径。有关更多信息,请参阅重排处理器示例

后续步骤