Link Search Menu Expand Document Documentation Menu

分隔有效负载词元过滤器

delimited_payload 词元过滤器用于在分析过程中解析包含有效负载的词元。例如,字符串 red|1.5 fast|2.0 car|1.0 被解析为词元 red(有效负载为 1.5)、fast(有效负载为 2.0)和 car(有效负载为 1.0)。当您的词元包含额外的相关数据(如权重、分数或其他数值)时,这尤其有用,您可以将这些数据用于评分或自定义查询逻辑。该过滤器可以处理不同类型的有效负载,包括整数、浮点数和字符串,并将有效负载(额外元数据)附加到词元上。

在分析文本时,delimited_payload 词元过滤器解析每个词元,提取有效负载,并将其附加到词元上。此有效负载后续可在查询中用于影响评分、提升或其他自定义行为。

有效负载以 Base64 编码字符串形式存储。默认情况下,有效负载不会随词元一起在查询响应中返回。要返回有效负载,您必须配置额外参数。有关更多信息,请参阅带存储有效负载的示例

参数

delimited_payload 词元过滤器有两个参数。

参数 必需/可选 数据类型 描述
encoding 可选 字符串 指定附加到词元的有效负载的数据类型。这决定了在分析和查询过程中如何解释有效负载数据。
有效值为

- float: 有效负载被解释为使用 IEEE 754 格式的 32 位浮点数(例如,car|2.5 中的 2.5)。
- identity: 有效负载被解释为字符序列(例如,在 user|admin 中,admin 被解释为字符串)。
- int: 有效负载被解释为 32 位整数(例如,priority|1 中的 1)。
默认值为 float
delimiter 可选 字符串 指定输入文本中词元与其有效负载之间的分隔符。默认值为竖线字符(|)。

不带存储有效负载的示例

以下示例请求创建一个名为 my_index 的新索引,并使用 delimited_payload 过滤器配置分析器

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_payload_filter": {
          "type": "delimited_payload",
          "delimiter": "|",
          "encoding": "float"
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "whitespace",
          "filter": ["my_payload_filter"]
        }
      }
    }
  }
}

生成的词元

使用以下请求检查使用该分析器生成的词元

POST /my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": "red|1.5 fast|2.0 car|1.0"
}

响应包含生成的词元

{
  "tokens": [
    {
      "token": "red",
      "start_offset": 0,
      "end_offset": 7,
      "type": "word",
      "position": 0
    },
    {
      "token": "fast",
      "start_offset": 8,
      "end_offset": 16,
      "type": "word",
      "position": 1
    },
    {
      "token": "car",
      "start_offset": 17,
      "end_offset": 24,
      "type": "word",
      "position": 2
    }
  ]
}

带存储有效负载的示例

要在响应中返回有效负载,请创建一个存储词元向量的索引,并在索引映射中将 term_vector 设置为 with_positions_payloadswith_positions_offsets_payloads。例如,以下索引被配置为存储词元向量

PUT /visible_payloads
{
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "term_vector": "with_positions_payloads",
        "analyzer": "custom_analyzer"
      }
    }
  },
  "settings": {
    "analysis": {
      "filter": {
        "my_payload_filter": {
          "type": "delimited_payload",
          "delimiter": "|",
          "encoding": "float"
        }
      },
      "analyzer": {
        "custom_analyzer": {
          "tokenizer": "whitespace",
          "filter": [ "my_payload_filter" ]
        }
      }
    }
  }
}

您可以使用以下请求将文档索引到此索引中

PUT /visible_payloads/_doc/1
{
  "text": "red|1.5 fast|2.0 car|1.0"
}

生成的词元

使用以下请求检查使用该分析器生成的词元

GET /visible_payloads/_termvectors/1
{
  "fields": ["text"]
}

响应包含生成的词元,其中包括有效负载

{
  "_index": "visible_payloads",
  "_id": "1",
  "_version": 1,
  "found": true,
  "took": 3,
  "term_vectors": {
    "text": {
      "field_statistics": {
        "sum_doc_freq": 3,
        "doc_count": 1,
        "sum_ttf": 3
      },
      "terms": {
        "brown": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 1,
              "start_offset": 10,
              "end_offset": 19,
              "payload": "QEAAAA=="
            }
          ]
        },
        "fox": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 2,
              "start_offset": 20,
              "end_offset": 27,
              "payload": "P8AAAA=="
            }
          ]
        },
        "quick": {
          "term_freq": 1,
          "tokens": [
            {
              "position": 0,
              "start_offset": 0,
              "end_offset": 9,
              "payload": "QCAAAA=="
            }
          ]
        }
      }
    }
  }
}

剩余 350 字符

有问题?

想要贡献?