Apache Solr
作成日:
solr 検索エンジン 全文検索 Lucene
Apache Solrは、Apache Luceneをベースにしたオープンソースの全文検索プラットフォームです。大量のテキストデータに対して高速な検索を提供し、エンタープライズ向けの検索機能を構築するために広く使用されています。
概要
Solrとは
Solr(ソーラー、発音は”Solar”と同じ)は、Javaで書かれた検索サーバーです。以下の特徴があります:
- 全文検索: テキストデータに対する高速な検索機能
- ファセット検索: カテゴリ別の絞り込み検索
- ハイライト: 検索結果内のマッチ箇所を強調表示
- スケーラビリティ: SolrCloudによる分散検索
Apache Luceneとの関係
- Lucene(ルシーン): 全文検索のコアライブラリ(Java)
- Solr: Luceneの上に構築された検索サーバー・プラットフォーム
Luceneは低レベルのライブラリであり、直接使用するには専門知識が必要です。Solrは、Luceneの機能をHTTP API経由で利用できるようにし、管理UI、設定管理、分散検索などの機能を追加しています。
主な機能
全文検索
# 基本的な検索クエリ例
http://localhost:8983/solr/mycore/select?q=検索キーワード
- 形態素解析: 日本語などの言語に対応した分かち書き
- N-gram: 文字単位での検索
- 同義語検索: シソーラスを使った検索拡張
ファセット検索
カテゴリ、価格帯、日付などによる絞り込み検索が可能です:
# ファセット検索の例
http://localhost:8983/solr/products/select?q=*:*&facet=true&facet.field=category
SolrCloud
分散検索・高可用性のためのクラスタリング機能:
- シャーディング: データを複数のノードに分散
- レプリケーション: データの冗長化
- ZooKeeper連携: クラスタ管理と設定の同期
Elasticsearchとの比較
SolrとElasticsearchは、どちらもLuceneベースの検索エンジンですが、いくつかの違いがあります:
| 観点 | Solr | Elasticsearch |
|---|---|---|
| 歴史 | 2004年〜(より古い) | 2010年〜 |
| 管理 | Apache財団 | Elastic社 |
| 設定 | XMLベース | JSONベース |
| クラスタリング | SolrCloud(ZooKeeper必須) | 組み込み |
| リアルタイム検索 | 対応(NRT) | 標準で高速 |
| ユースケース | エンタープライズ検索 | ログ分析、検索 |
選定の指針
- Solr: 複雑なテキスト検索、エンタープライズ環境、既存Java環境との統合
- Elasticsearch: ログ分析(ELKスタック)、リアルタイム分析、JSON-first環境
ユースケース
- ECサイトの商品検索: ファセット検索による絞り込み
- 社内文書検索: 大量のドキュメントからの情報検索
- ログ検索: アプリケーションログの検索・分析
- 地理空間検索: 位置情報を使った検索
Dockerでの使用
# docker-compose.yaml
services:
solr:
image: solr:9
ports:
- "8983:8983"
volumes:
- solr_data:/var/solr
volumes:
solr_data:
基本操作
# コアの作成
docker exec -it solr solr create_core -c mycore
# データのインデックス
curl -X POST -H 'Content-Type: application/json' \
'http://localhost:8983/solr/mycore/update?commit=true' \
--data-binary '[{"id":"1","title":"サンプルドキュメント"}]'
# 検索
curl 'http://localhost:8983/solr/mycore/select?q=*:*'
日本語検索の設定
日本語の全文検索には、形態素解析器の設定が必要です:
Kuromoji(形態素解析)
<!-- managed-schema の設定例 -->
<fieldType name="text_ja" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
<filter class="solr.JapaneseBaseFormFilterFactory"/>
<filter class="solr.JapanesePartOfSpeechStopFilterFactory"/>
<filter class="solr.CJKWidthFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
関連トピック
- Docker - コンテナ環境での運用
- Docker Compose - マルチサービス構成