書籍概要

Software Design plus

[改訂第3版]Apache Solr入門
―オープンソース全文検索エンジン

著者
発売日
更新日

概要

今回で3回目の改訂となるApache Solrの解説書です。Solrはオープンソースの検索エンジンソフトウェアです。多くの企業で使用され,検索を利用したさまざまなサービスを実現する基盤になっています。本書はSolrの基本的な技術の解説と知識をまとめたのちに,ドキュメント検索,インデクシング,クラスタなどのその特徴あるしくみを紹介し,より具体的なプログラミング手法にも言及していきます。そして検索精度改善,レコメンデーションシステムへの応用といった発展的な利用方法まで詳細に解説します。

こんな方におすすめ

  • 検索エンジンのしくみ,自然言語解析,レコメンデーション,分散システム(の基礎),などコンピュータサイエンスとエンジニアリングの狭間に興味がある先進の気風をもった若きエンジニアの皆さん

著者から一言

「楽しい検索の世界へようこそ!」
本書はSolrを体系的に解説した書籍です。Solrは検索エンジンライブラリApache Luceneをベースに構築されたオープンソースの検索エンジンサーバです。Luceneは非常に優れたライブラリですが,利用するにはJavaのプログラミングスキルが必要です。また,Luceneを使って大規模な検索サービスを実現するには,分散処理に関する高度なスキルが必要となります。Solrは,HTTPでアクセスできるRESTライクなAPIと,スケールアウトのしくみを備え,Solrを利用することで誰でもより簡単に検索アプリケーションを構築できるようになっています。また,Solrは,HTTPを介してLuceneを使うAPIを備えるだけでなく,さまざまな追加機能や使い勝手を向上させるしくみがプラスされています。

補足

本書は,ハンズオン形式で動作を確認しながら読み進められるよう,豊富なサンプルコードと設定例を用意しています。書籍内で紹介するサンプルは,次のGitHub リポジトリから入手できます。どうぞ,お手元にリポジトリをclone してから本書を読み進めてください!

https://github.com/solrbook3/examples

サンプル

samplesamplesample

目次

第1章 イントロダクション

  • 1.1 Apache Solrとは
    • 1.1.1 Solr の特徴
  • 1.2 検索エンジンのしくみ
    • 1.2.1 転置インデックス
    • 1.2.2 検索結果のランキング
  • 1.3 単語分割とアナライザ
    • 1.3.1 単語分割(トークナイズ)
    • 1.3.2 アナライザ
  • 1.4 Solrのインストール
    • 1.4.1 Javaのインストール
    • 1.4.2 Solrのインストール(全プラットフォーム共通)
  • 1.5 Solr付属のサンプルを実行する
    • 1.5.1 Solrの起動とサンプルデータの登録
    • 1.5.2 サンプルデータの検索
    • 1.5.3 Solritasの使い方
    • 1.5.4 Solrの停止
  • 1.6 Solrのアーキテクチャ
    • 1.6.1 Solr全体構成
    • 1.6.2 Solrホームディレクトリ

第2章 スキーマの定義

  • 2.1 スキーマとは
  • 2.2 スキーマ定義ファイル
    • 2.2.1 コアの作成
    • 2.2.2 managed-schemaとschema.xml
    • 2.2.3 スキーマ定義ファイルの配置場所
  • 2.3 スキーマ定義の流れ
    • 2.3.1 スキーマ定義の有効化
  • 2.4 フィールドタイプ
    • 2.4.1 フィールドタイプの定義
    • 2.4.2 非テキスト系フィールドタイプ
    • 2.4.3 テキスト系フィールドタイプ
    • 2.4.4 アナライザ
    • 2.5 フィールドの定義
  • 2.6 Analysis画面
    • 2.6.1 text_jaの動作確認
  • 2.7 書籍データでの定義例
    • 2.7.1 書籍データのフィールドについて

第3章 インデックスの作成

  • 3.1 ドキュメントの登録
    • 3.1.1 Solrの起動
    • 3.1.2 コアの作成
    • 3.1.3 スキーマの定義
    • 3.1.4 JSONファイルによる登録
    • 3.1.5 XMLファイルによる登録
    • 3.1.6 CSVファイルによる登録
  • 3.2 「書籍データ」のインデクシング
    • 3.2.1 sample-books.jsonの登録
    • 3.2.2 ドキュメントの登録確認
  • 3.3 インデックスディレクトリ
  • 3.4 ドキュメントの更新
    • 3.4.1 アトミックアップデート(部分更新)
  • 3.5 ドキュメントの削除
  • 3.6 コミット/ロールバック
    • 3.6.1 コミット
    • 3.6.2 自動コミット
    • 3.6.3 commitWithin
    • 3.6.4 ロールバック

第4章 ドキュメントの検索

  • 4.1 検索の基本動作
    • 4.1.1 検索のしくみ
    • 4.1.2 検索リクエストとパラメータ
    • 4.1.3 検索式
    • 4.1.4 サーチハンドラ
    • 4.1.5 レスポンスライタ
  • 4.2 検索レスポンス
    • 4.2.1 ヘッダ情報
    • 4.2.2 検索結果
  • 4.3 検索結果のソート
    • 4.3.1 スコアでのソート
    • 4.3.2 特定フィールドでのソート
  • 4.4 ハイライト
    • 4.4.1 ハイライトの基本動作
    • 4.4.2 ハイライトの設定
    • 4.4.3 ハイライトの結果
  • 4.5 絞り込み検索(フィルタクエリ:fq)
    • 4.6 ファセット
    • 4.6.1 ファセットとは
    • 4.6.2 ファセットのしくみ

第5章 高度なインデクシング

  • 5.1 バッチ処理
    • 5.1.1 JSON データによるバッチ処理例
    • 5.1.2 XML データによるバッチ処理例
  • 5.2 インデクシング前処理――UpdateRequestProcessor
    • 5.2.1 UpdateRequestProcessorの設定
    • 5.2.2 正規表現による置換――RegexReplaceProcessorFactory
    • 5.2.3 スクリプト処理――StatelessScriptUpdateProcessorFactory
    • 5.2.4 その他のUpdateRequestProcessor
  • 5.3 データのインポート――DataImportHandle
    • 5.3.1 データインポートハンドラの設定
    • 5.3.2 RDB からのインポート
  • 5.4 擬似リアルタイム検索
    • 5.4.1 (ハード)コミットとソフトコミット
    • 5.4.2 自動ソフトコミット
  • 5.5 バイナリ形式ドキュメントのインデクシング――ExtractingRequestHandler
    • 5.5.1 ExtractingRequestHandler の設定
    • 5.5.2 ExtractingRequestHandler を使ったインデクシング
  • 5.6 インデックス作成に関連するsolrconfig.xmlの設定
    • 5.6.1 IndexConfig設定
    • 5.6.2 インデックスセグメントとマージポリシー
    • 5.6.3 オプティマイズ
  • 5.7 トランザクションログ
    • 5.7.1 トランザクションログとインデックスの更新のしくみ
    • 5.7.2 トランザクションログの設定
    • 5.7.3 リアルタイムGet
    • 5.7.4 インデックスのリカバリ

第6章 高度な検索

  • 6.1 クエリパーサ
    • 6.1.1 Standard クエリパーサ
    • 6.1.2 DisMax クエリパーサ
    • 6.1.3 Extended DisMaxクエリパーサ
    • 6.1.4 ローカルパラメータ
  • 6.2 ハイライト
    • 6.2.1 ハイライタの種類
    • 6.2.2 ハイライタの設定
    • 6.2.3 ハイライト用の検索パラメータ
  • 6.3 ファセット
    • 6.3.1 フィールド値によるファセット
    • 6.3.2 クエリによるファセット
    • 6.3.3 レンジファセット(範囲によるファセット)
    • 6.3.4 ピボットファセット
  • 6.4 サーチコンポーネントとサーチハンドラ
    • 6.4.1 検索キーワードのサジェスチョン――SuggestComponent
    • 6.4.2 統計情報の表示――StatsComponent
  • 6.5 Result GroupingとCollapse and Expand
    • 6.5.1 Result Groupingとは
    • 6.5.2 Collapse and Expand とは
  • 6.6 空間検索
    • 6.6.1 空間検索とは
    • 6.6.2 フィールド定義とインデックス
    • 6.6.3 空間検索の利用例
  • 6.7 ファンクションクエリ
    • 6.7.1 ファンクションクエリとは
    • 6.7.2 Solrに標準のファンクション
  • 6.8 キャッシュ
    • 6.8.1 キャッシュの種類と設定
    • 6.8.2 キャッシュの自動ウォームアップ
    • 6.8.3 キャッシュの統計情報

第7章 スキーマ設計

  • 7.1 スキーマ定義ファイル
    • 7.1.1 スキーマ定義ファイルの配置場所と設定
    • 7.1.2 スキーマ定義の構成要素
    • 7.1.3 スキーマレスモード
  • 7.2 フィールドタイプ
    • 7.2.1 フィールドタイプの設定オプション
    • 7.2.2 非テキスト系フィールドタイプ
    • 7.2.3 テキスト系フィールドタイプ
    • 7.2.4 アナライザ
    • 7.2.5 文字フィルタ
    • 7.2.6 代表的なトークナイザ
    • 7.2.7 代表的なトークンフィルタ
  • 7.3 フィールドの定義
    • 7.3.1 フィールドの定義
    • 7.3.2 ダイナミックフィールドの定義
    • 7.3.3 ユニークキーフィールドの定義
    • 7.3.4 コピーフィールドの定義
    • 7.3.5 その他のフィールドとオプションの説明
  • 7.4 Similarityの定義

第8章 クラスタ構築と運用

  • 8.1 単一ノードの限界
  • 8.2 分散インデックスと分散検索
    • 8.2.1 分散インデックス
    • 8.2.2 分散検索
    • 8.2.3 分散インデックスのセットアップ
    • 8.2.4 分散インデクシングと分散検索の実行
    • 8.2.5 分散検索のエラー回避
  • 8.3 レプリケーション
    • 8.3.1 レプリケーションの概要
    • 8.3.2 マスタ/スレーブの設定方法と設定項目
    • 8.3.3 マスタ/スレーブのセットアップ
    • 8.3.4 レプリケーションの確認
  • 8.4 レガシーなクラスタ
    • 8.4.1 レガシーなクラスタを構築する準備
    • 8.4.2 レガシーなクラスタの構築
    • 8.4.3 分散インデクシングと分散検索
  • 8.5 SolrCloud
    • 8.5.1 ZooKeeperのインストールと起動
    • 8.5.2 SolrCloud構築
    • 8.5.3 分散インデクシングと分散検索,レプリケーション
    • 8.5.4 フェールオーバー
    • 8.5.5 インデックスのリカバリ
    • 8.5.6 リーダーの選出
    • 8.5.7 SolrCloudの拡張

第9章 検索精度の改善

  • 9.1 検索精度の定義
    • 9.1.1 再現率と適合率
    • 9.1.2 ランキング
  • 9.2 再現率と適合率の改善
    • 9.2.1 アナライザの変更による再現率と適合率の改善
    • 9.2.2 各種辞書の活用
  • 9.3 ランキングの改善
    • 9.3.1 キーワードと文書の類似度
    • 9.3.2 ファンクションクエリの活用
    • 9.3.3 クエリリランキング
  • 9.4 検索精度の評価
    • 9.4.1 オフライン評価
    • 9.4.2 オンライン評価とオフライン評価
    • 9.4.3 A/Bテスト
  • 9.5 機械学習による検索の改善
    • 9.5.1 Learning To Rank
  • 9.6 Solrをレコメンドエンジンとして使う
    • 9.6.1 レコメンドは検索の特殊ケース
    • 9.6.2 レコメンドエンジンの作り方の例
    • 9.6.3 ログからレコメンドの中身を考える
    • 9.6.4 クエリに任せる処理,インデックス時に行う処理
    • 9.6.5 IDと属性の比較

第10章 開発運用のTIPS

  • 10.1 サイジング
    • 10.1.1 CPU
    • 10.1.2 メモリ
    • 10.1.3 ストレージ
  • 10.2 モニタリング
    • 10.2.1 管理画面からの確認
    • 10.2.2 REST APIからの確認
    • 10.2.3 JMXからの確認
  • 10.3 Solr4系からのバージョンアップ
    • 10.3.1 Javaのバージョンの変更
    • 10.3.2 warデプロイの廃止および起動方法の変更
    • 10.3.3 solr.xmlフォーマットの変更
    • 10.3.4 デフォルトのSchemaFactoryの変更
    • 10.3.5 デフォルトのSimilarityの変更
    • 10.3.6 StopFilterFactoryのenablePositionIncrements属性の廃止
    • 10.3.7 SolrJ APIの変更
    • 10.3.8 DocValuesの使用
  • 10.4 ログの設定
    • 10.4.1 Solrログ
    • 10.4.2 GCログ
  • 10.5 Distributed IDF
  • 10.6 FAQ集
    • 10.6.1 Question 1 -ソートがうまくいかない
    • 10.6.2 Question 2 -シノニム辞書を定義したのに思うように動作しない
    • 10.6.3 Question 3 -定義できるフィールド数に制限はあるのか?
    • 10.6.4 Question 4 -ワイルドカード検索がうまくいかない
    • 10.6.5 Question 5 -Solrの起動が極端に遅い
    • 10.6.6 Question 6 -実際にレコメンド目的でSolrを導入している例とは?

第11章 SolrJ プログラミング

  • 11.1 SolrJクライアントアプリケーション
    • 11.1.1 ビルドとインストール
    • 11.1.2 ドキュメントの登録
    • 11.1.3 ドキュメントの検索
    • 11.1.4 ドキュメントの削除
    • 11.1.5 インテグレーションテスト(結合テスト)

Appendix 付録

Appendix 1 Gitのインストール

    • A.1.1 Ubuntu などのDebian 系Linux
    • A.1.2 CentOS などRedHat 系Linux
    • A.1.3 Mac/Windows

Appendix 2 Python機械学習の環境構築

    • A.2.1 必要なもの
    • A.2.2 インストール
    • A.2.3 関連パッケージの準備
    • A.2.4 Jupyter Notebook の起動

Appendix 3 ネステッドドキュメントとBlock Join

    • A.3.1 ユースケース
    • A.3.2 インデクシング
    • A.3.3 Block Join
    • A.3.4 ネステッドドキュメントにおけるファセット

Appendix 4 N-best

    • A.4.1 形態素解析のしくみ
    • A.4.2 N-best によって改善できるこ
    • A.4.3 N-best の仕様
    • A.4.4 N-bestのパラメータ
    • A.4.5 Analysis画面での確認

サポート

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2017年5月9日最終更新)

第1刷をお買い上げの方への正誤表

商品一覧