Фильтр токенов Fingerprint
Сортирует и удаляет дубликаты токенов из потока токенов, а затем конкатенирует поток в один выходной токен.
Например, этот фильтр изменяет поток токенов [ the, fox, was, very, very, quick ] следующим образом:
- Сортирует токены в алфавитном порядке, чтобы
[ fox, quick, the, very, very, was ] - Удаляет дублированный экземпляр токена
very. - Конкатенирует поток токенов в один выходной токен:
[fox quick the very was ]
Выходные токены, созданные этим фильтром, полезны для создания отпечатков пальцев и кластеризации текста, как описано в проекте OpenRefine.
Этот фильтр использует FingerprintFilter из Lucene.
Пример
Следующий запрос API анализа использует фильтр fingerprint для создания одного выходного токена для текста zebra jumps over resting
resting dog:
resp = client.indices.analyze(
tokenizer="whitespace",
filter=[
"fingerprint"
],
text="zebra jumps over resting resting dog",
)
print(resp) response = client.indices.analyze(
body: {
tokenizer: 'whitespace',
filter: [
'fingerprint'
],
text: 'zebra jumps over resting resting dog'
}
)
puts response const response = await client.indices.analyze({
tokenizer: "whitespace",
filter: ["fingerprint"],
text: "zebra jumps over resting resting dog",
});
console.log(response); GET _analyze
{
"tokenizer" : "whitespace",
"filter" : ["fingerprint"],
"text" : "zebra jumps over resting resting dog"
} Фильтр производит следующий токен:
[ dog jumps over resting zebra ]
Добавление в анализатор
Следующий запрос API создания индекса использует фильтр fingerprint для настройки нового пользовательского анализатора.
resp = client.indices.create(
index="fingerprint_example",
settings={
"analysis": {
"analyzer": {
"whitespace_fingerprint": {
"tokenizer": "whitespace",
"filter": [
"fingerprint"
]
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'fingerprint_example',
body: {
settings: {
analysis: {
analyzer: {
whitespace_fingerprint: {
tokenizer: 'whitespace',
filter: [
'fingerprint'
]
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "fingerprint_example",
settings: {
analysis: {
analyzer: {
whitespace_fingerprint: {
tokenizer: "whitespace",
filter: ["fingerprint"],
},
},
},
},
});
console.log(response); PUT fingerprint_example
{
"settings": {
"analysis": {
"analyzer": {
"whitespace_fingerprint": {
"tokenizer": "whitespace",
"filter": [ "fingerprint" ]
}
}
}
}
} Настраиваемые параметры
-
max_output_size - (Необязательно, целое число) Максимальная длина выходного токена, включая пробелы. По умолчанию
255. Конкатенированные токены, длина которых превышает этот параметр, не будут выведены. -
separator - (Необязательно, строка) Символ, используемый для конкатенации потока токенов. По умолчанию пробел.
Настройка
Чтобы настроить фильтр fingerprint, дублируйте его, чтобы создать основу для нового пользовательского фильтра токенов. Вы можете изменить фильтр, используя его настраиваемые параметры.
Например, следующий запрос создает пользовательский фильтр fingerprint, который использует + для конкатенации потоков токенов. Фильтр также ограничивает выходные токены 100 символами или меньше.
resp = client.indices.create(
index="custom_fingerprint_example",
settings={
"analysis": {
"analyzer": {
"whitespace_": {
"tokenizer": "whitespace",
"filter": [
"fingerprint_plus_concat"
]
}
},
"filter": {
"fingerprint_plus_concat": {
"type": "fingerprint",
"max_output_size": 100,
"separator": "+"
}
}
}
},
)
print(resp) response = client.indices.create(
index: 'custom_fingerprint_example',
body: {
settings: {
analysis: {
analyzer: {
whitespace_: {
tokenizer: 'whitespace',
filter: [
'fingerprint_plus_concat'
]
}
},
filter: {
fingerprint_plus_concat: {
type: 'fingerprint',
max_output_size: 100,
separator: '+'
}
}
}
}
}
)
puts response const response = await client.indices.create({
index: "custom_fingerprint_example",
settings: {
analysis: {
analyzer: {
whitespace_: {
tokenizer: "whitespace",
filter: ["fingerprint_plus_concat"],
},
},
filter: {
fingerprint_plus_concat: {
type: "fingerprint",
max_output_size: 100,
separator: "+",
},
},
},
},
});
console.log(response); PUT custom_fingerprint_example
{
"settings": {
"analysis": {
"analyzer": {
"whitespace_": {
"tokenizer": "whitespace",
"filter": [ "fingerprint_plus_concat" ]
}
},
"filter": {
"fingerprint_plus_concat": {
"type": "fingerprint",
"max_output_size": 100,
"separator": "+"
}
}
}
}
}
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/analysis-fingerprint-tokenfilter.html