フラットグラフトークンフィルター
グラフトークンフィルターによって生成されたtoken graphをフラット化します。例えば、synonym_graph
やword_delimiter_graph
などです。
multi-position tokensを含むトークングラフをフラット化すると、グラフはindexingに適したものになります。そうでない場合、インデックス作成はマルチポジショントークンを含むトークングラフをサポートしません。
グラフのフラット化は損失のあるプロセスです。
可能であれば、flatten_graph
フィルターの使用を避けてください。代わりに、search analyzers内でのみグラフトークンフィルターを使用してください。これにより、flatten_graph
フィルターの必要がなくなります。
## 例
`````flatten_graph`````フィルターがどのように機能するかを見るには、まずマルチポジショントークンを含むトークングラフを生成する必要があります。
次の[analyze API](/read/elasticsearch-8-15/1a51b9d359d8a54c.md)リクエストは、`````synonym_graph`````フィルターを使用して、テキスト`````domain name system is fragile`````内の`````dns`````をマルチポジション同義語として追加します。
#### Python
``````python
resp = client.indices.analyze(
tokenizer="standard",
filter=[
{
"type": "synonym_graph",
"synonyms": [
"dns, domain name system"
]
}
],
text="domain name system is fragile",
)
print(resp)
`
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'standard',
filter: [
{
type: 'synonym_graph',
synonyms: [
'dns, domain name system'
]
}
],
text: 'domain name system is fragile'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
{
type: "synonym_graph",
synonyms: ["dns, domain name system"],
},
],
text: "domain name system is fragile",
});
console.log(response);
コンソール
GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "synonym_graph",
"synonyms": [ "dns, domain name system" ]
}
],
"text": "domain name system is fragile"
}
フィルターは、dns
をマルチポジショントークンとして持つ次のトークングラフを生成します。
インデックス作成はマルチポジショントークンを含むトークングラフをサポートしません。このトークングラフをインデックス作成に適したものにするには、フラット化する必要があります。
トークングラフをフラット化するには、前のanalyze APIリクエストでsynonym_graph
フィルターの後にflatten_graph
フィルターを追加します。
Python
resp = client.indices.analyze(
tokenizer="standard",
filter=[
{
"type": "synonym_graph",
"synonyms": [
"dns, domain name system"
]
},
"flatten_graph"
],
text="domain name system is fragile",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'standard',
filter: [
{
type: 'synonym_graph',
synonyms: [
'dns, domain name system'
]
},
'flatten_graph'
],
text: 'domain name system is fragile'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
{
type: "synonym_graph",
synonyms: ["dns, domain name system"],
},
"flatten_graph",
],
text: "domain name system is fragile",
});
console.log(response);
コンソール
GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "synonym_graph",
"synonyms": [ "dns, domain name system" ]
},
"flatten_graph"
],
"text": "domain name system is fragile"
}
フィルターは、インデックス作成に適した次のフラット化されたトークングラフを生成します。
アナライザーに追加
次のcreate index APIリクエストは、flatten_graph
トークンフィルターを使用して新しいcustom analyzerを構成します。
このアナライザーでは、カスタムword_delimiter_graph
フィルターが連結されたマルチポジショントークンを含むトークングラフを生成します。flatten_graph
フィルターはこれらのトークングラフをフラット化し、インデックス作成に適したものにします。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"my_custom_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"my_custom_word_delimiter_graph_filter",
"flatten_graph"
]
}
},
"filter": {
"my_custom_word_delimiter_graph_filter": {
"type": "word_delimiter_graph",
"catenate_all": True
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_custom_index_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: [
'my_custom_word_delimiter_graph_filter',
'flatten_graph'
]
}
},
filter: {
my_custom_word_delimiter_graph_filter: {
type: 'word_delimiter_graph',
catenate_all: true
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
my_custom_index_analyzer: {
type: "custom",
tokenizer: "standard",
filter: ["my_custom_word_delimiter_graph_filter", "flatten_graph"],
},
},
filter: {
my_custom_word_delimiter_graph_filter: {
type: "word_delimiter_graph",
catenate_all: true,
},
},
},
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_custom_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"my_custom_word_delimiter_graph_filter",
"flatten_graph"
]
}
},
"filter": {
"my_custom_word_delimiter_graph_filter": {
"type": "word_delimiter_graph",
"catenate_all": true
}
}
}
}
}