ignore_above

設定された ignore_above より長い文字列はインデックスされず、保存されません。文字列の配列の場合、ignore_above は各配列要素に対して個別に適用され、ignore_above より長い文字列要素はインデックスされず、保存されません。

すべての文字列/配列要素は、_source フィールドに存在します。これは、Elasticsearch のデフォルトであるため、これが有効になっている場合です。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "message": {
  6. "type": "keyword",
  7. "ignore_above": 20
  8. }
  9. }
  10. },
  11. )
  12. print(resp)
  13. resp1 = client.index(
  14. index="my-index-000001",
  15. id="1",
  16. document={
  17. "message": "Syntax error"
  18. },
  19. )
  20. print(resp1)
  21. resp2 = client.index(
  22. index="my-index-000001",
  23. id="2",
  24. document={
  25. "message": "Syntax error with some long stacktrace"
  26. },
  27. )
  28. print(resp2)
  29. resp3 = client.search(
  30. index="my-index-000001",
  31. aggs={
  32. "messages": {
  33. "terms": {
  34. "field": "message"
  35. }
  36. }
  37. },
  38. )
  39. print(resp3)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. message: {
  7. type: 'keyword',
  8. ignore_above: 20
  9. }
  10. }
  11. }
  12. }
  13. )
  14. puts response
  15. response = client.index(
  16. index: 'my-index-000001',
  17. id: 1,
  18. body: {
  19. message: 'Syntax error'
  20. }
  21. )
  22. puts response
  23. response = client.index(
  24. index: 'my-index-000001',
  25. id: 2,
  26. body: {
  27. message: 'Syntax error with some long stacktrace'
  28. }
  29. )
  30. puts response
  31. response = client.search(
  32. index: 'my-index-000001',
  33. body: {
  34. aggregations: {
  35. messages: {
  36. terms: {
  37. field: 'message'
  38. }
  39. }
  40. }
  41. }
  42. )
  43. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. message: {
  6. type: "keyword",
  7. ignore_above: 20,
  8. },
  9. },
  10. },
  11. });
  12. console.log(response);
  13. const response1 = await client.index({
  14. index: "my-index-000001",
  15. id: 1,
  16. document: {
  17. message: "Syntax error",
  18. },
  19. });
  20. console.log(response1);
  21. const response2 = await client.index({
  22. index: "my-index-000001",
  23. id: 2,
  24. document: {
  25. message: "Syntax error with some long stacktrace",
  26. },
  27. });
  28. console.log(response2);
  29. const response3 = await client.search({
  30. index: "my-index-000001",
  31. aggs: {
  32. messages: {
  33. terms: {
  34. field: "message",
  35. },
  36. },
  37. },
  38. });
  39. console.log(response3);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "message": {
  6. "type": "keyword",
  7. "ignore_above": 20
  8. }
  9. }
  10. }
  11. }
  12. PUT my-index-000001/_doc/1
  13. {
  14. "message": "Syntax error"
  15. }
  16. PUT my-index-000001/_doc/2
  17. {
  18. "message": "Syntax error with some long stacktrace"
  19. }
  20. GET my-index-000001/_search
  21. {
  22. "aggs": {
  23. "messages": {
  24. "terms": {
  25. "field": "message"
  26. }
  27. }
  28. }
  29. }
このフィールドは20文字を超える文字列を無視します。
このドキュメントは正常にインデックスされました。
このドキュメントはインデックスされますが、message フィールドのインデックスは行われません。
検索は両方のドキュメントを返しますが、最初のドキュメントのみが用語集約に存在します。

ignore_above 設定は、マッピングの更新 APIを使用して既存のフィールドに対して更新できます。

このオプションは、Lucene の用語バイト長制限 32766 に対する保護にも役立ちます。

ignore_above の値は 文字数 ですが、Lucene はバイトをカウントします。多くの非ASCII文字を含むUTF-8テキストを使用する場合、UTF-8文字は最大4バイトを占める可能性があるため、制限を 32766 / 4 = 8191 に設定することをお勧めします。