mappings-es9.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import type { estypes } from '@elastic/elasticsearch9';
  2. type Mappings = {
  3. settings: estypes.IndicesCreateRequest['settings'];
  4. mappings: estypes.IndicesCreateRequest['mappings'];
  5. }
  6. export const mappings: Mappings = {
  7. settings: {
  8. analysis: {
  9. filter: {
  10. english_stop: {
  11. type: 'stop',
  12. stopwords: '_english_',
  13. },
  14. },
  15. tokenizer: {
  16. edge_ngram_tokenizer: {
  17. type: 'edge_ngram',
  18. min_gram: 2,
  19. max_gram: 20,
  20. token_chars: ['letter', 'digit'],
  21. },
  22. },
  23. analyzer: {
  24. japanese: {
  25. type: 'custom',
  26. tokenizer: 'kuromoji_tokenizer',
  27. char_filter: ['icu_normalizer'],
  28. },
  29. english_edge_ngram: {
  30. type: 'custom',
  31. tokenizer: 'edge_ngram_tokenizer',
  32. filter: [
  33. 'lowercase',
  34. 'english_stop',
  35. ],
  36. },
  37. },
  38. },
  39. },
  40. mappings: {
  41. properties: {
  42. path: {
  43. type: 'text',
  44. fields: {
  45. raw: {
  46. type: 'text',
  47. analyzer: 'keyword',
  48. },
  49. ja: {
  50. type: 'text',
  51. analyzer: 'japanese',
  52. },
  53. en: {
  54. type: 'text',
  55. analyzer: 'english_edge_ngram',
  56. search_analyzer: 'standard',
  57. },
  58. },
  59. },
  60. body: {
  61. type: 'text',
  62. fields: {
  63. ja: {
  64. type: 'text',
  65. analyzer: 'japanese',
  66. },
  67. en: {
  68. type: 'text',
  69. analyzer: 'english_edge_ngram',
  70. search_analyzer: 'standard',
  71. },
  72. },
  73. },
  74. body_embedded: {
  75. type: 'dense_vector',
  76. dims: 768,
  77. },
  78. comments: {
  79. type: 'text',
  80. fields: {
  81. ja: {
  82. type: 'text',
  83. analyzer: 'japanese',
  84. },
  85. en: {
  86. type: 'text',
  87. analyzer: 'english_edge_ngram',
  88. search_analyzer: 'standard',
  89. },
  90. },
  91. },
  92. username: {
  93. type: 'keyword',
  94. },
  95. comment_count: {
  96. type: 'integer',
  97. },
  98. bookmark_count: {
  99. type: 'integer',
  100. },
  101. like_count: {
  102. type: 'integer',
  103. },
  104. grant: {
  105. type: 'integer',
  106. },
  107. granted_users: {
  108. type: 'keyword',
  109. },
  110. granted_groups: {
  111. type: 'keyword',
  112. },
  113. created_at: {
  114. type: 'date',
  115. format: 'date_optional_time',
  116. },
  117. updated_at: {
  118. type: 'date',
  119. format: 'date_optional_time',
  120. },
  121. tag_names: {
  122. type: 'keyword',
  123. },
  124. },
  125. },
  126. };