重複トークンフィルターの削除
同じ位置にある重複トークンを削除します。
remove_duplicates
フィルターは、Lucene の RemoveDuplicatesTokenFilter を使用します。
例
remove_duplicates
フィルターがどのように機能するかを見るには、まず同じ位置に重複トークンを含むトークンストリームを生成する必要があります。
次の analyze API リクエストは、keyword_repeat
と stemmer
フィルターを使用して、jumping dog
のためにステム化されたトークンと非ステム化されたトークンを作成します。
Python
resp = client.indices.analyze(
tokenizer="whitespace",
filter=[
"keyword_repeat",
"stemmer"
],
text="jumping dog",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'whitespace',
filter: [
'keyword_repeat',
'stemmer'
],
text: 'jumping dog'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "whitespace",
filter: ["keyword_repeat", "stemmer"],
text: "jumping dog",
});
console.log(response);
コンソール
GET _analyze
{
"tokenizer": "whitespace",
"filter": [
"keyword_repeat",
"stemmer"
],
"text": "jumping dog"
}
API は次のレスポンスを返します。位置 1
の dog
トークンが重複していることに注意してください。
コンソール-結果
{
"tokens": [
{
"token": "jumping",
"start_offset": 0,
"end_offset": 7,
"type": "word",
"position": 0
},
{
"token": "jump",
"start_offset": 0,
"end_offset": 7,
"type": "word",
"position": 0
},
{
"token": "dog",
"start_offset": 8,
"end_offset": 11,
"type": "word",
"position": 1
},
{
"token": "dog",
"start_offset": 8,
"end_offset": 11,
"type": "word",
"position": 1
}
]
}
重複している dog
トークンの1つを削除するには、前の analyze API リクエストに remove_duplicates
フィルターを追加します。
Python
resp = client.indices.analyze(
tokenizer="whitespace",
filter=[
"keyword_repeat",
"stemmer",
"remove_duplicates"
],
text="jumping dog",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'whitespace',
filter: [
'keyword_repeat',
'stemmer',
'remove_duplicates'
],
text: 'jumping dog'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "whitespace",
filter: ["keyword_repeat", "stemmer", "remove_duplicates"],
text: "jumping dog",
});
console.log(response);
コンソール
GET _analyze
{
"tokenizer": "whitespace",
"filter": [
"keyword_repeat",
"stemmer",
"remove_duplicates"
],
"text": "jumping dog"
}
API は次のレスポンスを返します。位置 1
に dog
トークンが1つだけになりました。
コンソール-結果
{
"tokens": [
{
"token": "jumping",
"start_offset": 0,
"end_offset": 7,
"type": "word",
"position": 0
},
{
"token": "jump",
"start_offset": 0,
"end_offset": 7,
"type": "word",
"position": 0
},
{
"token": "dog",
"start_offset": 8,
"end_offset": 11,
"type": "word",
"position": 1
}
]
}
アナライザーへの追加
次の create index API リクエストは、remove_duplicates
フィルターを使用して新しい カスタムアナライザー を構成します。
このカスタムアナライザーは、keyword_repeat
と stemmer
フィルターを使用して、ストリーム内の各トークンのステム化されたバージョンと非ステム化されたバージョンを作成します。remove_duplicates
フィルターは、同じ位置にある重複トークンを削除します。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"tokenizer": "standard",
"filter": [
"keyword_repeat",
"stemmer",
"remove_duplicates"
]
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_custom_analyzer: {
tokenizer: 'standard',
filter: [
'keyword_repeat',
'stemmer',
'remove_duplicates'
]
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
my_custom_analyzer: {
tokenizer: "standard",
filter: ["keyword_repeat", "stemmer", "remove_duplicates"],
},
},
},
},
});
console.log(response);
コンソール
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_analyzer": {
"tokenizer": "standard",
"filter": [
"keyword_repeat",
"stemmer",
"remove_duplicates"
]
}
}
}
}
}