diff --git a/service/search/es.go b/service/search/es.go index 9152cedd1..21c0d6040 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", @@ -144,28 +151,64 @@ 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", }, + "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", }, - "filter": m{ - "sudachi_split_filter": m{ - "type": "sudachi_split", - "mode": "search", + "ja_ngram_index_analyzer": m{ + "type": "custom", + "char_filter": []string{ + "normalize", + }, + "tokenizer": "ja_ngram_tokenizer", + "filter": []string{ + "lowercase", }, }, - "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_search_analyzer": m{ + "type": "custom", + "char_filter": []string{ + "normalize", + }, + "tokenizer": "ja_ngram_tokenizer", + "filter": []string{ + "lowercase", }, }, }, @@ -305,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", }