From 0b16030a45f2bbf8df07d33186ffd226974f361e Mon Sep 17 00:00:00 2001 From: hachimitsu-pichi Date: Wed, 21 Jan 2026 16:46:27 +0900 Subject: [PATCH 1/4] feat(search): add ngram support for Japanese text analysis in Elasticsearch settings --- service/search/es.go | 66 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/service/search/es.go b/service/search/es.go index 9152cedd1..1fcd3c0aa 100644 --- a/service/search/es.go +++ b/service/search/es.go @@ -107,6 +107,13 @@ var esMapping = m{ "text": m{ "type": "text", "analyzer": "sudachi_analyzer", + "fields": m{ + "ngram": m{ + "type": "text", + "search_analyzer": "ja_ngram_search_analyzer", + "analyzer": "ja_ngram_index_analyzer", + }, + }, }, "createdAt": m{ "type": "date", @@ -149,25 +156,54 @@ var esSetting = m{ "type": "sudachi_tokenizer", }, }, - "filter": m{ - "sudachi_split_filter": m{ - "type": "sudachi_split", - "mode": "search", + + "ja_ngram_tokenizer": m{ + "type": "ngram", + "min_gram": 2, + "max_gram": 2, + "token_chars": []string{ + "letter", + "digit", + }, + }, + }, + "filter": m{ + "sudachi_split_filter": m{ + "type": "sudachi_split", + "mode": "search", + }, + }, + "analyzer": m{ + "sudachi_analyzer": m{ + "tokenizer": "sudachi_tokenizer", + "type": "custom", + "filter": []string{ + "sudachi_split_filter", + "sudachi_normalizedform", }, + "discard_punctuation": true, + "resources_path": "/usr/share/elasticsearch/plugins/analysis-sudachi/", + "settings_path": "/usr/share/elasticsearch/plugins/analysis-sudachi/sudachi.json", }, - "analyzer": m{ - "sudachi_analyzer": m{ - "tokenizer": "sudachi_tokenizer", - "type": "custom", - "filter": []string{ - "sudachi_split_filter", - "sudachi_normalizedform", - }, - "discard_punctuation": true, - "resources_path": "/usr/share/elasticsearch/plugins/analysis-sudachi/", - "settings_path": "/usr/share/elasticsearch/plugins/analysis-sudachi/sudachi.json", + "ja_ngram_index_analyzer": m{ + "type": "custom", + "char_filter": []string{ + "normalize", + }, + "tokenizer": "ja_ngram_tokenizer", + "filter": []string{ + "lowercase", }, }, + "ja_ngram_search_analyzer": m{ + "type": "custom", + "char_filter": []string{ + "normalize", + }, + "tokenizer": "ja_ngram_tokenizer", + "filter": []string{ + "lowercase", + }}, }, }, } From be8445f14b1a6544400a0a767643187907826d47 Mon Sep 17 00:00:00 2001 From: hachimitsu-pichi Date: Wed, 21 Jan 2026 17:01:30 +0900 Subject: [PATCH 2/4] feat(search): add ICU normalization char filter to Elasticsearch settings --- service/search/es.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/service/search/es.go b/service/search/es.go index 1fcd3c0aa..1349f9018 100644 --- a/service/search/es.go +++ b/service/search/es.go @@ -151,6 +151,13 @@ var esMapping = m{ var esSetting = m{ "index": m{ "analysis": m{ + "char_filter": m{ + "normalize": m{ + "type": "icu_normalizer", + "name": "nfkc", + "mode": "compose", + }, + }, "tokenizer": m{ "sudachi_tokenizer": m{ "type": "sudachi_tokenizer", From 01343b149a49f86d2870e7581de7eb20b91f1b45 Mon Sep 17 00:00:00 2001 From: hachimitsu-pichi Date: Wed, 21 Jan 2026 17:08:00 +0900 Subject: [PATCH 3/4] feat(search): add ngram field to Elasticsearch query for improved text analysis --- service/search/es.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/search/es.go b/service/search/es.go index 1349f9018..588d378a4 100644 --- a/service/search/es.go +++ b/service/search/es.go @@ -348,7 +348,7 @@ func (e *esEngine) Do(q *Query) (Result, error) { if q.Word.Valid { body := simpleQueryString{ Query: q.Word.V, - Fields: []string{"text"}, + Fields: []string{"text", "text.ngram"}, DefaultOperator: "AND", } From 13667941401017a2035e87ce35bb569dc5426bca Mon Sep 17 00:00:00 2001 From: hachimitsu-pichi Date: Wed, 21 Jan 2026 17:18:10 +0900 Subject: [PATCH 4/4] feat(search): refactor ja_ngram_tokenizer settings for improved readability --- service/search/es.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/service/search/es.go b/service/search/es.go index 588d378a4..21c0d6040 100644 --- a/service/search/es.go +++ b/service/search/es.go @@ -162,15 +162,14 @@ var esSetting = m{ "sudachi_tokenizer": m{ "type": "sudachi_tokenizer", }, - }, - - "ja_ngram_tokenizer": m{ - "type": "ngram", - "min_gram": 2, - "max_gram": 2, - "token_chars": []string{ - "letter", - "digit", + "ja_ngram_tokenizer": m{ + "type": "ngram", + "min_gram": 2, + "max_gram": 2, + "token_chars": []string{ + "letter", + "digit", + }, }, }, }, @@ -210,7 +209,8 @@ var esSetting = m{ "tokenizer": "ja_ngram_tokenizer", "filter": []string{ "lowercase", - }}, + }, + }, }, }, }