扁平化图标记过滤器
编辑扁平化图标记过滤器编辑
扁平化由图标记过滤器(例如 synonym_graph
或 word_delimiter_graph
)生成的 标记图。
扁平化包含 多位置标记 的标记图,使其适合 索引。否则,索引不支持包含多位置标记的标记图。
扁平化图是一个有损过程。
如果可能,请避免使用 flatten_graph
过滤器。相反,仅在 搜索分析器 中使用图标记过滤器。这将消除对 flatten_graph
过滤器的需求。
flatten_graph
过滤器使用 Lucene 的 FlattenGraphFilter。
示例编辑
要了解 flatten_graph
过滤器的工作原理,您首先需要生成一个包含多位置标记的标记图。
以下 分析 API 请求使用 synonym_graph
过滤器将 dns
作为 domain name system
的多位置同义词添加到文本 domain name system is fragile
中
response = client.indices.analyze( body: { tokenizer: 'standard', filter: [ { type: 'synonym_graph', synonyms: [ 'dns, domain name system' ] } ], text: 'domain name system is fragile' } ) puts response
GET /_analyze { "tokenizer": "standard", "filter": [ { "type": "synonym_graph", "synonyms": [ "dns, domain name system" ] } ], "text": "domain name system is fragile" }
该过滤器生成以下标记图,其中 dns
作为多位置标记。
索引不支持包含多位置标记的标记图。为了使此标记图适合索引,需要对其进行扁平化。
要扁平化标记图,请在之前的分析 API 请求中,在 synonym_graph
过滤器之后添加 flatten_graph
过滤器。
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
GET /_analyze { "tokenizer": "standard", "filter": [ { "type": "synonym_graph", "synonyms": [ "dns, domain name system" ] }, "flatten_graph" ], "text": "domain name system is fragile" }
该过滤器生成以下扁平化标记图,该图适合索引。
添加到分析器编辑
以下 创建索引 API 请求使用 flatten_graph
标记过滤器来配置一个新的 自定义分析器。
在此分析器中,自定义 word_delimiter_graph
过滤器生成包含连接的多位置标记的标记图。 flatten_graph
过滤器扁平化这些标记图,使其适合索引。
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
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 } } } } }