カスタムアナライザーの作成

組み込みのアナライザーがニーズを満たさない場合、適切な組み合わせを使用する custom アナライザーを作成できます:

設定

custom アナライザーは次のパラメーターを受け入れます:

type アナライザーのタイプ。 組み込みアナライザータイプを受け入れます。カスタムアナライザーの場合は、customを使用するか、このパラメーターを省略します。
tokenizer 組み込みまたはカスタマイズされた トークナイザー.
(必須)
char_filter 組み込みまたはカスタマイズされた 文字フィルターのオプションの配列。
filter 組み込みまたはカスタマイズされた トークンフィルターのオプションの配列。
position_increment_gap テキスト値の配列をインデックスする際、Elasticsearchは1つの値の最後の用語と次の値の最初の用語の間に偽の「ギャップ」を挿入し、フレーズクエリが異なる配列要素からの2つの用語に一致しないようにします。デフォルトは 100 です。詳細は position_increment_gap を参照してください。

例の設定

以下を組み合わせた例を示します:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "char_filter": [
  10. "html_strip"
  11. ],
  12. "filter": [
  13. "lowercase",
  14. "asciifolding"
  15. ]
  16. }
  17. }
  18. }
  19. },
  20. )
  21. print(resp)
  22. resp1 = client.indices.analyze(
  23. index="my-index-000001",
  24. analyzer="my_custom_analyzer",
  25. text="Is this déjà vu</b>?",
  26. )
  27. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_custom_analyzer: {
  8. type: 'custom',
  9. tokenizer: 'standard',
  10. char_filter: [
  11. 'html_strip'
  12. ],
  13. filter: [
  14. 'lowercase',
  15. 'asciifolding'
  16. ]
  17. }
  18. }
  19. }
  20. }
  21. }
  22. )
  23. puts response
  24. response = client.indices.analyze(
  25. index: 'my-index-000001',
  26. body: {
  27. analyzer: 'my_custom_analyzer',
  28. text: 'Is this déjà vu</b>?'
  29. }
  30. )
  31. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_custom_analyzer: {
  7. type: "custom",
  8. tokenizer: "standard",
  9. char_filter: ["html_strip"],
  10. filter: ["lowercase", "asciifolding"],
  11. },
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);
  17. const response1 = await client.indices.analyze({
  18. index: "my-index-000001",
  19. analyzer: "my_custom_analyzer",
  20. text: "Is this déjà vu</b>?",
  21. });
  22. console.log(response1);

コンソール

  1. PUT my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "char_filter": [
  10. "html_strip"
  11. ],
  12. "filter": [
  13. "lowercase",
  14. "asciifolding"
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. POST my-index-000001/_analyze
  22. {
  23. "analyzer": "my_custom_analyzer",
  24. "text": "Is this <b>déjà vu</b>?"
  25. }

| | custom アナライザーの場合、typecustom に設定するか、type パラメーターを省略します。

上記の例は次の用語を生成します:

テキスト

  1. [ is, this, deja, vu ]

前の例では、トークナイザー、トークンフィルター、および文字フィルターがデフォルト設定で使用されましたが、それぞれの設定されたバージョンを作成し、カスタムアナライザーで使用することが可能です。

以下を組み合わせたより複雑な例を示します:

以下は例です:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. settings={
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "char_filter": [
  8. "emoticons"
  9. ],
  10. "tokenizer": "punctuation",
  11. "filter": [
  12. "lowercase",
  13. "english_stop"
  14. ]
  15. }
  16. },
  17. "tokenizer": {
  18. "punctuation": {
  19. "type": "pattern",
  20. "pattern": "[ .,!?]"
  21. }
  22. },
  23. "char_filter": {
  24. "emoticons": {
  25. "type": "mapping",
  26. "mappings": [
  27. ":) => _happy_",
  28. ":( => _sad_"
  29. ]
  30. }
  31. },
  32. "filter": {
  33. "english_stop": {
  34. "type": "stop",
  35. "stopwords": "_english_"
  36. }
  37. }
  38. }
  39. },
  40. )
  41. print(resp)
  42. resp1 = client.indices.analyze(
  43. index="my-index-000001",
  44. analyzer="my_custom_analyzer",
  45. text="I'm a :) person, and you?",
  46. )
  47. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. settings: {
  5. analysis: {
  6. analyzer: {
  7. my_custom_analyzer: {
  8. char_filter: [
  9. 'emoticons'
  10. ],
  11. tokenizer: 'punctuation',
  12. filter: [
  13. 'lowercase',
  14. 'english_stop'
  15. ]
  16. }
  17. },
  18. tokenizer: {
  19. punctuation: {
  20. type: 'pattern',
  21. pattern: '[ .,!?]'
  22. }
  23. },
  24. char_filter: {
  25. emoticons: {
  26. type: 'mapping',
  27. mappings: [
  28. ':) => _happy_',
  29. ':( => _sad_'
  30. ]
  31. }
  32. },
  33. filter: {
  34. english_stop: {
  35. type: 'stop',
  36. stopwords: '_english_'
  37. }
  38. }
  39. }
  40. }
  41. }
  42. )
  43. puts response
  44. response = client.indices.analyze(
  45. index: 'my-index-000001',
  46. body: {
  47. analyzer: 'my_custom_analyzer',
  48. text: "I'm a :) person, and you?"
  49. }
  50. )
  51. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. settings: {
  4. analysis: {
  5. analyzer: {
  6. my_custom_analyzer: {
  7. char_filter: ["emoticons"],
  8. tokenizer: "punctuation",
  9. filter: ["lowercase", "english_stop"],
  10. },
  11. },
  12. tokenizer: {
  13. punctuation: {
  14. type: "pattern",
  15. pattern: "[ .,!?]",
  16. },
  17. },
  18. char_filter: {
  19. emoticons: {
  20. type: "mapping",
  21. mappings: [":) => _happy_", ":( => _sad_"],
  22. },
  23. },
  24. filter: {
  25. english_stop: {
  26. type: "stop",
  27. stopwords: "_english_",
  28. },
  29. },
  30. },
  31. },
  32. });
  33. console.log(response);
  34. const response1 = await client.indices.analyze({
  35. index: "my-index-000001",
  36. analyzer: "my_custom_analyzer",
  37. text: "I'm a :) person, and you?",
  38. });
  39. console.log(response1);

コンソール

  1. PUT my-index-000001
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "char_filter": [
  8. "emoticons"
  9. ],
  10. "tokenizer": "punctuation",
  11. "filter": [
  12. "lowercase",
  13. "english_stop"
  14. ]
  15. }
  16. },
  17. "tokenizer": {
  18. "punctuation": {
  19. "type": "pattern",
  20. "pattern": "[ .,!?]"
  21. }
  22. },
  23. "char_filter": {
  24. "emoticons": {
  25. "type": "mapping",
  26. "mappings": [
  27. ":) => _happy_",
  28. ":( => _sad_"
  29. ]
  30. }
  31. },
  32. "filter": {
  33. "english_stop": {
  34. "type": "stop",
  35. "stopwords": "_english_"
  36. }
  37. }
  38. }
  39. }
  40. }
  41. POST my-index-000001/_analyze
  42. {
  43. "analyzer": "my_custom_analyzer",
  44. "text": "I'm a :) person, and you?"
  45. }
インデックスにデフォルトのカスタムアナライザー my_custom_analyzer を割り当てます。このアナライザーは、リクエストの後で定義されるカスタムトークナイザー、文字フィルター、およびトークンフィルターを使用します。このアナライザーは type パラメーターも省略します。
カスタム punctuation トークナイザーを定義します。
カスタム emoticons 文字フィルターを定義します。
カスタム english_stop トークンフィルターを定義します。

上記の例は次の用語を生成します:

テキスト

  1. [ i'm, _happy_, person, you ]