openSearchを使用すれば、簡単に日本語の全文検索が可能となる。
なぜOpenSearchを使用するのか?
・全文検索のパフォーマンスが早い
インメモリのデータ構造で検索を行うため、高速に検索が可能となる
・トークンの検索が可能で、関連度の高いものが簡単に検索できる
・日本語検索の機能もある程度充実
kuromojiのプラグインを使用すれば、ある程度は日本語のトークン分割も想定通りの結果となる。(filterや類義語辞典で調整は必要)
・kibanaの機能が充実しており、開発しやすい
「dev tool」でopenSearchへ直接API実行できて便利
OpenSearchの概要
結構分かりやすいので一読すると、大体わかる
実際の日本語検索を開発する時に勉強した
https://www.elastic.co/jp/blog/how-to-implement-japanese-full-text-search-in-elasticsearch
kuromojiの仕様を理解するのに役に立った
https://qiita.com/shin_hayata/items/41c07923dbf58f13eec4
jsで作成するのに役に立った
https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/index.html
jsのサンプルが充実
https://www.tabnine.com/code/javascript/functions/%2540elastic%252Felasticsearch/Client/indices
トークン分割の調査時に、使用したAPI
一般的には、既存のアナライザーを設定して確認するが、アナライザ無くても、色々な設定が試せる。
GET test/_analyze
{
"text": "東京大学",
"tokenizer": {
"type": "kuromoji_tokenizer", ← 日本語検索
"mode": "search", ← トークン分割「東京」「大学」「東京大学※1」 ※1 類義語用に使用する
"discard_compound_token": true
},
"filter": [
"lowercase",
{
"type": "synonym_graph",
"lenient": true,
"synonyms":["東京大学,東大"] ← トークン:「東大」
}
]
}
→ トークン「東京」「大学」「東大」が取得可能