久々に OpenSearch を使用する機会があり、いろいろ忘れていたのでメモがてら書いていきます。
目次
OpenSearchとは
OpenSearch は Elasticsearch をベースに作られた全文検索エンジンです。
Apache License 2.0 ライセンスで公開されており、速度や分析柔軟性に優れた検索機能を利用できます。
事前に登録しておいた json ファイルの中身をフルテキスト検索するイメージです。
※ 本記事では Elasticsearch との違いには特に触れません。
構築
docker compose で構築していきます。
まず、Dockerfile を作成します。
詳しい解説は割愛しますが、日本語を扱う上で便利なプラグインを入れています。
FROM opensearchproject/opensearch:1.1.0 RUN /usr/share/opensearch/bin/opensearch-plugin install analysis-kuromoji RUN /usr/share/opensearch/bin/opensearch-plugin install analysis-icu
次に、compose.yaml を作成します。
OpenSearch と OpenSearch ダッシュボードを用意します。
ダッシュボードは、GUI から OpenSearch の操作やデータの閲覧などいろいろできます。
services: opensearch-dashboards: image: opensearchproject/opensearch-dashboards:1.0.1 container_name: opensearch-dashboards environment: OPENSEARCH_HOSTS: "https://opensearch:9200" ports: - 5601:5601 links: - opensearch opensearch: build: context: . dockerfile: Dockerfile container_name: opensearch environment: - cluster.name=docker-cluster - node.name=os-node - cluster.initial_master_nodes=os-node - bootstrap.memory_lock=true - http.host=0.0.0.0 - transport.host=127.0.0.1 - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 volumes: - $PWD/.local/opensearch:/usr/share/opensearch/data ports: - 9200:9200
起動します。
docker compose up -d
起動が完了したら、http://localhost:5601 の OpenSearch ダッシュボードにアクセスします。※ 30秒程度かかることがあります。
以下の情報でログインします。
Username:admin Password:admin
ログインできました。
左のメニューから Dev Tools
を開きます。
Dev Tools では、API で OpenSearch を操作できます。ここまできたら構築完了です。
基本用語
OpenSearch は、RDB(リレーショナルデータベース)と概念的に近い部分があります。
基本操作
実際に、OpenSearch ダッシュボードから操作してみます。
インデックス作成
documents という名前のインデックスを作成します。
PUT documents
ドキュメント登録
POST /documents/_doc { "title": "ドキュメントタイトル", "content": "ドキュメントの中身です。" }
ドキュメント検索
GET /documents/_search { "query": { "bool": { "must": [ { "match": { "content": "ドキュメント" } } ] } }, "highlight": { "fields": { "content": {} } } }
検索時に highlight
を設定すると、検索したフィールドのテキストのうちどこかヒットしたのかを em タグで囲んで返してくれます。
google などで検索したときも、検索したワードが太字になっていたりしますよね。OpenSearch 側でタグで囲んでくれるので同じような表示を簡単に実現できます。
おわりに
OpenSearch の構築と、基本的な操作をやってみました。
もう少し複雑な検索を行えるようにするための、インデックスのマッピング定義や、アナライザーの設定などについても書きたいと思ってます。