加权分词查询编辑

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能支持 SLA 的约束。

加权分词查询需要一个分词-权重对列表,这些分词-权重对在查询中发送,而不是使用自然语言处理模型计算得出。然后,这些分词对用于针对 稀疏向量排名特征 字段的查询。

当您想使用外部查询扩展模型或快速原型化更改而无需重新索引新模型时,加权分词查询非常有用。

请求示例编辑

POST _search
{
  "query": {
    "weighted_tokens": {
      "query_expansion_field": {
        "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
        "pruning_config": {
          "tokens_freq_ratio_threshold": 5,
          "tokens_weight_threshold": 0.4,
          "only_score_pruned_tokens": false
        }
      }
    }
  }
}

weighted_token 的顶级参数编辑

<tokens>

(必填,字典)分词-权重对的字典。

pruning_config

(可选,对象)可选的剪枝配置。如果启用,这将从查询中省略不重要的分词,以提高查询性能。默认值:禁用。

<pruning_config> 的参数是

tokens_freq_ratio_threshold
(可选,整数)频率超过指定字段中所有分词平均频率 tokens_freq_ratio_threshold 倍的分词被视为异常值并被剪枝。此值必须介于 1 到 100 之间。默认值:5
tokens_weight_threshold
(可选,浮点数)权重小于 tokens_weight_threshold 的分词被视为不重要并被剪枝。此值必须介于 0 到 1 之间。默认值:0.4
only_score_pruned_tokens
(可选,布尔值)如果为 true,我们只将剪枝后的分词输入到评分中,并丢弃未剪枝的分词。强烈建议为主查询将其设置为 false,但可以为重新评分查询将其设置为 true 以获得更相关的结果。默认值:false

tokens_freq_ratio_thresholdtokens_weight_threshold 的默认值是根据使用 ELSER 进行的测试选择的,这些测试提供了最佳结果。

带有剪枝配置和重新评分的加权分词查询示例编辑

以下示例向 text_expansion 查询添加了剪枝配置。剪枝配置标识要从查询中剪枝的不重要分词,以提高查询性能。

分词剪枝发生在分片级别。虽然这应该会导致相同的分词在各个分片中都被标记为不重要,但这并不能根据每个分片的组成来保证。因此,如果您在多分片索引上运行带有 pruning_configtext_expansion,我们强烈建议添加一个带有最初从查询中剪枝的分词的 重新评分过滤后的搜索结果 函数。这将有助于减轻剪枝分词的任何分片级不一致,并总体上提供更好的相关性。

GET my-index/_search
{
   "query":{
      "weighted_tokens": {
      "query_expansion_field": {
        "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
        "pruning_config": {
          "tokens_freq_ratio_threshold": 5,
          "tokens_weight_threshold": 0.4,
          "only_score_pruned_tokens": false
        }
      }
    }
   },
   "rescore": {
      "window_size": 100,
      "query": {
         "rescore_query": {
            "weighted_tokens": {
              "query_expansion_field": {
                "tokens": {"2161": 0.4679, "2621": 0.307, "2782": 0.1299, "2851": 0.1056, "3088": 0.3041, "3376": 0.1038, "3467": 0.4873, "3684": 0.8958, "4380": 0.334, "4542": 0.4636, "4633": 2.2805, "4785": 1.2628, "4860": 1.0655, "5133": 1.0709, "7139": 1.0016, "7224": 0.2486, "7387": 0.0985, "7394": 0.0542, "8915": 0.369, "9156": 2.8947, "10505": 0.2771, "11464": 0.3996, "13525": 0.0088, "14178": 0.8161, "16893": 0.1376, "17851": 1.5348, "19939": 0.6012},
                "pruning_config": {
                  "tokens_freq_ratio_threshold": 5,
                  "tokens_weight_threshold": 0.4,
                  "only_score_pruned_tokens": true
                }
              }
            }
         }
      }
   }
}