一般社団法人 全国個人事業主支援協会

COLUMN コラム

openSearchを使用すれば、簡単に日本語の全文検索が可能となる。

 

なぜOpenSearchを使用するのか?

・全文検索のパフォーマンスが早い

インメモリのデータ構造で検索を行うため、高速に検索が可能となる

・トークンの検索が可能で、関連度の高いものが簡単に検索できる

・日本語検索の機能もある程度充実

kuromojiのプラグインを使用すれば、ある程度は日本語のトークン分割も想定通りの結果となる。(filterや類義語辞典で調整は必要)

・kibanaの機能が充実しており、開発しやすい

「dev tool」でopenSearchへ直接API実行できて便利

 

OpenSearchの概要

結構分かりやすいので一読すると、大体わかる

https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-OpenSearch-Service-Basic_0131_v1.pdf

 

実際の日本語検索を開発する時に勉強した

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":["東京大学,東大"] ← トークン:「東大」
      }
    ]
}

 

→ トークン「東京」「大学」「東大」が取得可能

 

 

The following two tabs change content below.

有村

フリーランスのシステムエンジニアしてます。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア