分隔有效负载词元过滤器
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_payloads
或 with_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=="
}
]
}
}
}
}
}