フラットグラフトークンフィルター

グラフトークンフィルターによって生成されたtoken graphをフラット化します。例えば、synonym_graphword_delimiter_graphなどです。

multi-position tokensを含むトークングラフをフラット化すると、グラフはindexingに適したものになります。そうでない場合、インデックス作成はマルチポジショントークンを含むトークングラフをサポートしません。

グラフのフラット化は損失のあるプロセスです。

可能であれば、flatten_graphフィルターの使用を避けてください。代わりに、search analyzers内でのみグラフトークンフィルターを使用してください。これにより、flatten_graphフィルターの必要がなくなります。

  1. ## 例
  2. `````flatten_graph`````フィルターがどのように機能するかを見るには、まずマルチポジショントークンを含むトークングラフを生成する必要があります。
  3. 次の[analyze API](/read/elasticsearch-8-15/1a51b9d359d8a54c.md)リクエストは、`````synonym_graph`````フィルターを使用して、テキスト`````domain name system is fragile`````内の`````dns`````をマルチポジション同義語として追加します。
  4. #### Python
  5. ``````python
  6. resp = client.indices.analyze(
  7. tokenizer="standard",
  8. filter=[
  9. {
  10. "type": "synonym_graph",
  11. "synonyms": [
  12. "dns, domain name system"
  13. ]
  14. }
  15. ],
  16. text="domain name system is fragile",
  17. )
  18. print(resp)
  19. `

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'standard',
  4. filter: [
  5. {
  6. type: 'synonym_graph',
  7. synonyms: [
  8. 'dns, domain name system'
  9. ]
  10. }
  11. ],
  12. text: 'domain name system is fragile'
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "standard",
  3. filter: [
  4. {
  5. type: "synonym_graph",
  6. synonyms: ["dns, domain name system"],
  7. },
  8. ],
  9. text: "domain name system is fragile",
  10. });
  11. console.log(response);

コンソール

  1. GET /_analyze
  2. {
  3. "tokenizer": "standard",
  4. "filter": [
  5. {
  6. "type": "synonym_graph",
  7. "synonyms": [ "dns, domain name system" ]
  8. }
  9. ],
  10. "text": "domain name system is fragile"
  11. }

フィルターは、dnsをマルチポジショントークンとして持つ次のトークングラフを生成します。

token graph dns synonym ex

インデックス作成はマルチポジショントークンを含むトークングラフをサポートしません。このトークングラフをインデックス作成に適したものにするには、フラット化する必要があります。

トークングラフをフラット化するには、前のanalyze APIリクエストでsynonym_graphフィルターの後にflatten_graphフィルターを追加します。

Python

  1. resp = client.indices.analyze(
  2. tokenizer="standard",
  3. filter=[
  4. {
  5. "type": "synonym_graph",
  6. "synonyms": [
  7. "dns, domain name system"
  8. ]
  9. },
  10. "flatten_graph"
  11. ],
  12. text="domain name system is fragile",
  13. )
  14. print(resp)

Ruby

  1. response = client.indices.analyze(
  2. body: {
  3. tokenizer: 'standard',
  4. filter: [
  5. {
  6. type: 'synonym_graph',
  7. synonyms: [
  8. 'dns, domain name system'
  9. ]
  10. },
  11. 'flatten_graph'
  12. ],
  13. text: 'domain name system is fragile'
  14. }
  15. )
  16. puts response

Js

  1. const response = await client.indices.analyze({
  2. tokenizer: "standard",
  3. filter: [
  4. {
  5. type: "synonym_graph",
  6. synonyms: ["dns, domain name system"],
  7. },
  8. "flatten_graph",
  9. ],
  10. text: "domain name system is fragile",
  11. });
  12. console.log(response);

コンソール

  1. GET /_analyze
  2. {
  3. "tokenizer": "standard",
  4. "filter": [
  5. {
  6. "type": "synonym_graph",
  7. "synonyms": [ "dns, domain name system" ]
  8. },
  9. "flatten_graph"
  10. ],
  11. "text": "domain name system is fragile"
  12. }

フィルターは、インデックス作成に適した次のフラット化されたトークングラフを生成します。

token graph dns invalid ex

アナライザーに追加

次のcreate index APIリクエストは、flatten_graphトークンフィルターを使用して新しいcustom analyzerを構成します。

このアナライザーでは、カスタムword_delimiter_graphフィルターが連結されたマルチポジショントークンを含むトークングラフを生成します。flatten_graphフィルターはこれらのトークングラフをフラット化し、インデックス作成に適したものにします。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_index_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "filter": [
  10. "my_custom_word_delimiter_graph_filter",
  11. "flatten_graph"
  12. ]
  13. }
  14. },
  15. "filter": {
  16. "my_custom_word_delimiter_graph_filter": {
  17. "type": "word_delimiter_graph",
  18. "catenate_all": True
  19. }
  20. }
  21. }
  22. },
  23. )
  24. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_custom_index_analyzer: {
  8. type: 'custom',
  9. tokenizer: 'standard',
  10. filter: [
  11. 'my_custom_word_delimiter_graph_filter',
  12. 'flatten_graph'
  13. ]
  14. }
  15. },
  16. filter: {
  17. my_custom_word_delimiter_graph_filter: {
  18. type: 'word_delimiter_graph',
  19. catenate_all: true
  20. }
  21. }
  22. }
  23. }
  24. }
  25. )
  26. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_custom_index_analyzer: {
  7. type: "custom",
  8. tokenizer: "standard",
  9. filter: ["my_custom_word_delimiter_graph_filter", "flatten_graph"],
  10. },
  11. },
  12. filter: {
  13. my_custom_word_delimiter_graph_filter: {
  14. type: "word_delimiter_graph",
  15. catenate_all: true,
  16. },
  17. },
  18. },
  19. },
  20. });
  21. console.log(response);

コンソール

  1. PUT /my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_index_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "filter": [
  10. "my_custom_word_delimiter_graph_filter",
  11. "flatten_graph"
  12. ]
  13. }
  14. },
  15. "filter": {
  16. "my_custom_word_delimiter_graph_filter": {
  17. "type": "word_delimiter_graph",
  18. "catenate_all": true
  19. }
  20. }
  21. }
  22. }
  23. }