Elasticsearchで全文検索する
環境変数ES_URIを設定すると、Project内の全文検索とProject横断検索がElasticsearchに切り替わります
全文検索が高速になる
検索結果が100件になる
project横断検索が高速になる
2 hop searchが使えるようになる
オンプレ版では2021/2/2以降のバージョンから実装されています
ES_URIが無い場合
これまで通り、MongoDBを使った検索になります
検索結果は30件
検索indexの作成・更新
自動的に作成されます
Projectのトップページにアクセスした
初めての検索時
ページを編集・削除した
初回の検索のみ失敗する可能性があります
その場合はしばらく待ってください
2回目以降は高速な検索が可能です
動作確認しているElasticsearchバージョン
elasticsearch 8.4.x
Amazon Elasticsearch Serviceは確認していません
docker-composeを使わない設定方法
環境変数ES_URIにElasticsearchのURLを設定する
https://user:pass@host:portの形式が使えます
docker-composeでの設定例
Install Elasticsearch with Docker | Elasticsearch Reference 7.10 | Elasticを参考にしましたshokai.icon
Dockerfileを作成する
code:containers/elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:9.1.4
RUN bin/elasticsearch-plugin install analysis-icu
analysis-icu pluginをインストールしておくと、日本語の検索がより正確になります
ビルドする
$ docker-compose build
elasticsearchのコンテナをdocker-compose.ymlに追加
code:docker-compose.yml
elasticsearch:
build: ./containers/elasticsearch
environment:
- discovery.type=single-node
- cluster.name=scrapbox
- bootstrap.memory_lock=true
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./elasticsearch/data:/usr/share/elasticsearch/data
appコンテナにES_URIとDELAY_APP_SERVER_STARTUPとdepends_onを設定
code:docker-compose.yml
app:
image: notainc/scrapbox:latest
environment:
ES_URI: 'http://elasticsearch:9200'
DELAY_APP_SERVER_STARTUP: '10000'
(略)
depends_on:
- mongo
- redis
- elasticsearch
起動する
$ docker-compose up -d
DELAY_APP_SERVER_STARTUPとは?
ElasticsearchやMongoDBの起動が遅い場合、appコンテナの起動を遅らせて待つための環境変数です
ES index version
Cosense内部の、検索方式のバージョンの事
scrapbox-pages-v番号という名前のindexと、index templateがElasticsearchに作成される
index versionが上がると
初回の検索のみ失敗する事があります
しばらく待つとindexが作成されます
古いindexとindex template
削除してokです
基本的には、ES index versionや、古いindexの存在を意識する必要はありませんshokai.icon
新しいバージョンのCosenseをdocker pullして起動すれば、自動的に切り替わっていきます
何かデータ不整合が起きた場合は、全文検索インデックスを全削除して再構築する事を試してください