区切りペイロードトークンフィルター
古い名前 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
フィルターを含むインデックスアナライザーを使用します。
保存されたペイロードは、term vectors API を使用して表示できます。
例
次の analyze API リクエストは、デフォルトの |
区切り文字を使用して delimited_payload
フィルターで the|0 brown|10 fox|5 is|0 quick|10
をトークンとペイロードに分割します。
Python
resp = client.indices.analyze(
tokenizer="whitespace",
filter=[
"delimited_payload"
],
text="the|0 brown|10 fox|5 is|0 quick|10",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'whitespace',
filter: [
'delimited_payload'
],
text: 'the|0 brown|10 fox|5 is|0 quick|10'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "whitespace",
filter: ["delimited_payload"],
text: "the|0 brown|10 fox|5 is|0 quick|10",
});
console.log(response);
コンソール
GET _analyze
{
"tokenizer": "whitespace",
"filter": ["delimited_payload"],
"text": "the|0 brown|10 fox|5 is|0 quick|10"
}
フィルターは次のトークンを生成します:
テキスト
[ the, brown, fox, is, quick ]
analyze API は保存されたペイロードを返さないことに注意してください。返されたペイロードを含む例については、保存されたペイロードを返すを参照してください。
アナライザーに追加
次の create index API リクエストは、delimited-payload
フィルターを使用して新しい カスタムアナライザー を構成します。
Python
resp = client.indices.create(
index="delimited_payload",
settings={
"analysis": {
"analyzer": {
"whitespace_delimited_payload": {
"tokenizer": "whitespace",
"filter": [
"delimited_payload"
]
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'delimited_payload',
body: {
settings: {
analysis: {
analyzer: {
whitespace_delimited_payload: {
tokenizer: 'whitespace',
filter: [
'delimited_payload'
]
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "delimited_payload",
settings: {
analysis: {
analyzer: {
whitespace_delimited_payload: {
tokenizer: "whitespace",
filter: ["delimited_payload"],
},
},
},
},
});
console.log(response);
コンソール
PUT delimited_payload
{
"settings": {
"analysis": {
"analyzer": {
"whitespace_delimited_payload": {
"tokenizer": "whitespace",
"filter": [ "delimited_payload" ]
}
}
}
}
}
設定可能なパラメータ
delimiter
- (オプション、文字列)トークンとペイロードを区切るために使用される文字。デフォルトは
|
です。 encoding
- (オプション、文字列)保存されたペイロードのデータ型。有効な値は:
float
- (デフォルト)Float
identity
- 文字
int
- 整数
カスタマイズしてアナライザーに追加
delimited_payload
フィルターをカスタマイズするには、それを複製して新しいカスタムトークンフィルターの基礎を作成します。設定可能なパラメータを使用してフィルターを変更できます。
たとえば、次の create index API リクエストは、カスタム delimited_payload
フィルターを使用して新しい カスタムアナライザー を構成します。カスタム delimited_payload
フィルターは、+
区切り文字を使用してトークンとペイロードを区切ります。ペイロードは整数としてエンコードされます。
Python
resp = client.indices.create(
index="delimited_payload_example",
settings={
"analysis": {
"analyzer": {
"whitespace_plus_delimited": {
"tokenizer": "whitespace",
"filter": [
"plus_delimited"
]
}
},
"filter": {
"plus_delimited": {
"type": "delimited_payload",
"delimiter": "+",
"encoding": "int"
}
}
}
},
)
print(resp)
Ruby
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
Js
const response = await client.indices.create({
index: "delimited_payload_example",
settings: {
analysis: {
analyzer: {
whitespace_plus_delimited: {
tokenizer: "whitespace",
filter: ["plus_delimited"],
},
},
filter: {
plus_delimited: {
type: "delimited_payload",
delimiter: "+",
encoding: "int",
},
},
},
},
});
console.log(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"
}
}
}
}
}
保存されたペイロードを返す
インデックスを作成するには、create index API を使用します:
- ペイロードを持つ用語ベクターを保存するフィールドを含む。
delimited_payload
フィルターを使用した カスタムインデックスアナライザー を使用します。
Python
resp = client.indices.create(
index="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"
]
}
}
}
},
)
print(resp)
Ruby
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
Js
const response = await client.indices.create({
index: "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"],
},
},
},
},
});
console.log(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" ]
}
}
}
}
}
ペイロードを含むドキュメントをインデックスに追加します。
Python
resp = client.index(
index="text_payloads",
id="1",
document={
"text": "the|0 brown|3 fox|4 is|0 quick|10"
},
)
print(resp)
Ruby
response = client.index(
index: 'text_payloads',
id: 1,
body: {
text: 'the|0 brown|3 fox|4 is|0 quick|10'
}
)
puts response
Js
const response = await client.index({
index: "text_payloads",
id: 1,
document: {
text: "the|0 brown|3 fox|4 is|0 quick|10",
},
});
console.log(response);
コンソール
POST text_payloads/_doc/1
{
"text": "the|0 brown|3 fox|4 is|0 quick|10"
}
term vectors API を使用して、ドキュメントのトークンと base64 エンコードされたペイロードを返します。
Python
resp = client.termvectors(
index="text_payloads",
id="1",
fields=[
"text"
],
payloads=True,
)
print(resp)
Ruby
response = client.termvectors(
index: 'text_payloads',
id: 1,
body: {
fields: [
'text'
],
payloads: true
}
)
puts response
Js
const response = await client.termvectors({
index: "text_payloads",
id: 1,
fields: ["text"],
payloads: true,
});
console.log(response);
コンソール
GET text_payloads/_termvectors/1
{
"fields": [ "text" ],
"payloads": true
}
コンソール-結果
{
"_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=="
}
]
}
}
}
}
}