分隔符有效载荷令牌过滤器
编辑分隔符有效载荷令牌过滤器编辑
旧名称 delimited_payload_filter
已弃用,不应与新索引一起使用。请改用 delimited_payload
。
根据指定的分隔符将令牌流分成令牌和有效载荷。
例如,您可以使用 delimited_payload
过滤器和 |
分隔符将 the|1 quick|2 fox|3
分割成令牌 the
、quick
和 fox
,其相应的有效载荷分别为 1
、2
和 3
。
此过滤器使用 Lucene 的 DelimitedPayloadTokenFilter。
有效载荷
有效载荷是与令牌位置关联的用户定义二进制数据,并以 base64 编码的字节存储。
Elasticsearch 默认情况下不存储令牌有效载荷。要存储有效载荷,您必须
- 将
term_vector
映射参数设置为with_positions_payloads
或with_positions_offsets_payloads
,用于存储有效载荷的任何字段。 - 使用包含
delimited_payload
过滤器的索引分析器
您可以使用 术语向量 API 查看存储的有效载荷。
示例编辑
以下 分析 API 请求使用 delimited_payload
过滤器和默认的 |
分隔符将 the|0 brown|10 fox|5 is|0 quick|10
分割成令牌和有效载荷。
response = client.indices.analyze( body: { tokenizer: 'whitespace', filter: [ 'delimited_payload' ], text: 'the|0 brown|10 fox|5 is|0 quick|10' } ) puts response
GET _analyze { "tokenizer": "whitespace", "filter": ["delimited_payload"], "text": "the|0 brown|10 fox|5 is|0 quick|10" }
过滤器生成以下令牌
[ the, brown, fox, is, quick ]
请注意,分析 API 不会返回存储的有效载荷。有关包含返回有效载荷的示例,请参阅 返回存储的有效载荷。
添加到分析器编辑
以下 创建索引 API 请求使用 delimited-payload
过滤器来配置新的 自定义分析器。
response = client.indices.create( index: 'delimited_payload', body: { settings: { analysis: { analyzer: { whitespace_delimited_payload: { tokenizer: 'whitespace', filter: [ 'delimited_payload' ] } } } } } ) puts response
PUT delimited_payload { "settings": { "analysis": { "analyzer": { "whitespace_delimited_payload": { "tokenizer": "whitespace", "filter": [ "delimited_payload" ] } } } } }
可配置参数编辑
-
分隔符
- (可选,字符串) 用于将令牌与有效载荷分隔的字符。默认为
|
。 -
编码
-
(可选,字符串) 存储有效载荷的数据类型。有效值为
-
浮点型
- (默认) 浮点型
-
标识
- 字符
-
整数
- 整数
-
自定义并添加到分析器编辑
要自定义 delimited_payload
过滤器,请将其复制以创建新自定义令牌过滤器的基础。您可以使用其可配置参数修改过滤器。
例如,以下 创建索引 API 请求使用自定义 delimited_payload
过滤器来配置新的 自定义分析器。自定义 delimited_payload
过滤器使用 +
分隔符将令牌与有效载荷分隔。有效载荷编码为整数。
response = client.indices.create( index: 'delimited_payload_example', body: { settings: { analysis: { analyzer: { whitespace_plus_delimited: { tokenizer: 'whitespace', filter: [ 'plus_delimited' ] } }, filter: { plus_delimited: { type: 'delimited_payload', delimiter: '+', encoding: 'int' } } } } } ) puts response
PUT delimited_payload_example { "settings": { "analysis": { "analyzer": { "whitespace_plus_delimited": { "tokenizer": "whitespace", "filter": [ "plus_delimited" ] } }, "filter": { "plus_delimited": { "type": "delimited_payload", "delimiter": "+", "encoding": "int" } } } } }
返回存储的有效载荷编辑
使用 创建索引 API 创建一个索引,该索引
- 包含存储带有有效载荷的术语向量的字段。
- 使用带有
delimited_payload
过滤器的 自定义索引分析器。
response = client.indices.create( index: 'text_payloads', body: { mappings: { properties: { text: { type: 'text', term_vector: 'with_positions_payloads', analyzer: 'payload_delimiter' } } }, settings: { analysis: { analyzer: { payload_delimiter: { tokenizer: 'whitespace', filter: [ 'delimited_payload' ] } } } } } ) puts response
PUT text_payloads { "mappings": { "properties": { "text": { "type": "text", "term_vector": "with_positions_payloads", "analyzer": "payload_delimiter" } } }, "settings": { "analysis": { "analyzer": { "payload_delimiter": { "tokenizer": "whitespace", "filter": [ "delimited_payload" ] } } } } }
向索引添加包含有效载荷的文档。
response = client.index( index: 'text_payloads', id: 1, body: { text: 'the|0 brown|3 fox|4 is|0 quick|10' } ) puts response
POST text_payloads/_doc/1 { "text": "the|0 brown|3 fox|4 is|0 quick|10" }
使用 术语向量 API 返回文档的令牌和 base64 编码的有效载荷。
response = client.termvectors( index: 'text_payloads', id: 1, body: { fields: [ 'text' ], payloads: true } ) puts response
GET text_payloads/_termvectors/1 { "fields": [ "text" ], "payloads": true }
API 返回以下响应
{ "_index": "text_payloads", "_id": "1", "_version": 1, "found": true, "took": 8, "term_vectors": { "text": { "field_statistics": { "sum_doc_freq": 5, "doc_count": 1, "sum_ttf": 5 }, "terms": { "brown": { "term_freq": 1, "tokens": [ { "position": 1, "payload": "QEAAAA==" } ] }, "fox": { "term_freq": 1, "tokens": [ { "position": 2, "payload": "QIAAAA==" } ] }, "is": { "term_freq": 1, "tokens": [ { "position": 3, "payload": "AAAAAA==" } ] }, "quick": { "term_freq": 1, "tokens": [ { "position": 4, "payload": "QSAAAA==" } ] }, "the": { "term_freq": 1, "tokens": [ { "position": 0, "payload": "AAAAAA==" } ] } } } } }