条件トークンフィルター
指定された述語スクリプトの条件に一致するトークンにトークンフィルターのセットを適用します。
このフィルターはLuceneのConditionalTokenFilterを使用します。
例
次のanalyze APIリクエストは、condition
フィルターを使用して、THE QUICK BROWN FOX
内の5文字未満のトークンに一致させます。その後、一致したトークンに対してlowercase
フィルターを適用し、小文字に変換します。
Python
resp = client.indices.analyze(
tokenizer="standard",
filter=[
{
"type": "condition",
"filter": [
"lowercase"
],
"script": {
"source": "token.getTerm().length() < 5"
}
}
],
text="THE QUICK BROWN FOX",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'standard',
filter: [
{
type: 'condition',
filter: [
'lowercase'
],
script: {
source: 'token.getTerm().length() < 5'
}
}
],
text: 'THE QUICK BROWN FOX'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
{
type: "condition",
filter: ["lowercase"],
script: {
source: "token.getTerm().length() < 5",
},
},
],
text: "THE QUICK BROWN FOX",
});
console.log(response);
コンソール
GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "condition",
"filter": [ "lowercase" ],
"script": {
"source": "token.getTerm().length() < 5"
}
}
],
"text": "THE QUICK BROWN FOX"
}
フィルターは次のトークンを生成します:
テキスト
[ the, QUICK, BROWN, fox ]
設定可能なパラメーター
filter
- (必須、トークンフィルターの配列) トークンフィルターの配列。トークンが
script
パラメーターの述語スクリプトに一致する場合、これらのフィルターが提供された順序でトークンに適用されます。
これらのフィルターには、インデックスマッピングで定義されたカスタムトークンフィルターを含めることができます。 script
- (必須、スクリプトオブジェクト) トークンフィルターを適用するために使用される述語スクリプト。このスクリプトにトークンが一致する場合、
filter
パラメーターのフィルターがトークンに適用されます。
有効なパラメーターについては、スクリプトの書き方を参照してください。インラインスクリプトのみがサポートされています。Painlessスクリプトは分析述語コンテキストで実行され、token
プロパティが必要です。
アナライザーのカスタマイズと追加
たとえば、次の[create index API](/read/elasticsearch-8-15/b5c127aabf881d48.md)リクエストは、カスタム`````condition`````フィルターを使用して新しい[カスタムアナライザー](/read/elasticsearch-8-15/f8c7123dddb484d0.md)を構成します。カスタム`````condition`````フィルターは、ストリーム内の最初のトークンに一致します。その後、一致したトークンを[`````reverse`````](/read/elasticsearch-8-15/26f0257a736bae76.md)フィルターを使用して反転させます。
#### Python
``````python
resp = client.indices.create(
index="palindrome_list",
settings={
"analysis": {
"analyzer": {
"whitespace_reverse_first_token": {
"tokenizer": "whitespace",
"filter": [
"reverse_first_token"
]
}
},
"filter": {
"reverse_first_token": {
"type": "condition",
"filter": [
"reverse"
],
"script": {
"source": "token.getPosition() === 0"
}
}
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'palindrome_list',
body: {
settings: {
analysis: {
analyzer: {
whitespace_reverse_first_token: {
tokenizer: 'whitespace',
filter: [
'reverse_first_token'
]
}
},
filter: {
reverse_first_token: {
type: 'condition',
filter: [
'reverse'
],
script: {
source: 'token.getPosition() === 0'
}
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "palindrome_list",
settings: {
analysis: {
analyzer: {
whitespace_reverse_first_token: {
tokenizer: "whitespace",
filter: ["reverse_first_token"],
},
},
filter: {
reverse_first_token: {
type: "condition",
filter: ["reverse"],
script: {
source: "token.getPosition() === 0",
},
},
},
},
},
});
console.log(response);
コンソール
PUT /palindrome_list
{
"settings": {
"analysis": {
"analyzer": {
"whitespace_reverse_first_token": {
"tokenizer": "whitespace",
"filter": [ "reverse_first_token" ]
}
},
"filter": {
"reverse_first_token": {
"type": "condition",
"filter": [ "reverse" ],
"script": {
"source": "token.getPosition() === 0"
}
}
}
}
}
}