述語スクリプトトークンフィルター
提供された述語スクリプトに一致しないトークンを削除します。このフィルターはインラインのPainlessスクリプトのみをサポートします。スクリプトは分析述語コンテキストで評価されます。
例
以下の分析APIリクエストは、predicate_token_filter
フィルターを使用してthe fox jumps the lazy dog
から3文字以上のトークンのみを出力します。
Python
resp = client.indices.analyze(
tokenizer="whitespace",
filter=[
{
"type": "predicate_token_filter",
"script": {
"source": "\n token.term.length() > 3\n "
}
}
],
text="the fox jumps the lazy dog",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'whitespace',
filter: [
{
type: 'predicate_token_filter',
script: {
source: "\n token.term.length() > 3\n "
}
}
],
text: 'the fox jumps the lazy dog'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "whitespace",
filter: [
{
type: "predicate_token_filter",
script: {
source: "\n token.term.length() > 3\n ",
},
},
],
text: "the fox jumps the lazy dog",
});
console.log(response);
コンソール
GET /_analyze
{
"tokenizer": "whitespace",
"filter": [
{
"type": "predicate_token_filter",
"script": {
"source": """
token.term.length() > 3
"""
}
}
],
"text": "the fox jumps the lazy dog"
}
フィルターは以下のトークンを生成します。
テキスト
[ jumps, lazy ]
APIの応答には、各出力トークンの位置とオフセットが含まれています。predicate_token_filter
フィルターはトークンの元の位置やオフセットを変更しないことに注意してください。
応答
コンソール-結果
{
"tokens" : [
{
"token" : "jumps",
"start_offset" : 8,
"end_offset" : 13,
"type" : "word",
"position" : 2
},
{
"token" : "lazy",
"start_offset" : 18,
"end_offset" : 22,
"type" : "word",
"position" : 4
}
]
}
設定可能なパラメータ
script
- (必須、スクリプトオブジェクト) 入力トークンをフィルタリングするために使用される条件を含むスクリプト。このスクリプトに一致するトークンのみが出力に含まれます。
このパラメータはインラインのPainlessスクリプトのみをサポートします。スクリプトは分析述語コンテキストで評価されます。
アナライザーのカスタマイズと追加
以下の[インデックス作成API](/read/elasticsearch-8-15/b5c127aabf881d48.md)リクエストは、カスタム`````predicate_token_filter`````フィルター、`````my_script_filter`````を使用して新しい[カスタムアナライザー](/read/elasticsearch-8-15/f8c7123dddb484d0.md)を構成します。
`````my_script_filter`````フィルターは、`````ALPHANUM`````以外のすべてのタイプのトークンを削除します。
#### Python
``````python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"my_script_filter"
]
}
},
"filter": {
"my_script_filter": {
"type": "predicate_token_filter",
"script": {
"source": "\n token.type.contains(\"ALPHANUM\")\n "
}
}
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: 'standard',
filter: [
'my_script_filter'
]
}
},
filter: {
my_script_filter: {
type: 'predicate_token_filter',
script: {
source: "\n token.type.contains(\"ALPHANUM\")\n "
}
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: "standard",
filter: ["my_script_filter"],
},
},
filter: {
my_script_filter: {
type: "predicate_token_filter",
script: {
source:
'\n token.type.contains("ALPHANUM")\n ',
},
},
},
},
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"my_script_filter"
]
}
},
"filter": {
"my_script_filter": {
"type": "predicate_token_filter",
"script": {
"source": """
token.type.contains("ALPHANUM")
"""
}
}
}
}
}
}