Apache Solr で全文検索

第6回 Solrクライアントサイトを構築する - ハイライト

2013.09.04

6.1 ハイライト

今回は前回作成したクライアントプログラムに、ハイライト機能を追加してみたいと思います。

ハイライト機能を使うと、検索文字列がドキュメントのどの部分にヒットしたのかを強調表示させることができ、ユーザはこの強調表示された部分をみながら目的のドキュメントを探すことができるようになります。

6.2 ハイライトの設定

ハイライトの設定は solrconfig.xml の

<searchComponent class="solr.HighlightComponent" name="highlight">

で行われています。ハイライト機能はデフォルト有効になっており、設定もそのまま使用します。

スキーマの設定

ハイライトを利用するためには、フィールドのstored属性をtrue にする必要があります。indexedはfalseでもかまいません。

contentフィールドをハイライトに使う予定ですが、前回このフィールドをstring型として設定していました。ハイライトを行うフィールドの型はハイライトする単語を探すため解析を行う型である必要があります。

そういう訳で、contentフィールドの型をstringからtext_jaに変更します。

<field name="content" type="text_ja" indexed="false" stored="true" />

6.3 ハイライト用のパラメータ

ハイライト用のパラメータには以下のものがあります。

パラメータ名 説明
hl trueの場合、ハイライト機能をオンにする。
hl.fl ハイライト対象のフィールド。複数指定する場合はカンマで区切る。
hl.simple.pre, hl.simple.post ハイライト対象の単語を囲む文字列を指定する。*.preが単語の前、*.postが単語の後の文字列。デフォルトは “<em>” と “</em>”。
hl.snippets 取得するスニペット(要約された文章)の数。デフォルトは1。
hl.fragsize 1つのスニペットの最大文字数。デフォルトは100。
hl.requireFieldMatch trueの場合、ハイライト対象とされるフィールドに対する検索語のみがハイライトされる。
hl.usePhraseHighlighter trueの場合、検索式にフレーズ検索が存在する場合にフレーズのみがハイライトされる。
hl.highlightMultiTerm trueの場合、範囲検索、ワイルドカード検索の検索式の場合もハイライトする。

パラメータの詳細については こちらを参照ください。

実際にcurlコマンドでリクエストを出してみると以下のような結果が得られます。

$ curl "http://localhost:8080/solr/aozora/select?q=%E8%8A%A5%E5%B7%9D&fl=id%2Ctitle&wt=xml&indent=true&hl=true&hl.fl=content"
<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">15</int>
<lst name="params">
  <str name="fl">id,title</str>
  <str name="indent">true</str>
  <str name="q">芥川</str>
  <str name="hl.fl">content</str>
  <str name="wt">xml</str>
  <str name="hl">true</str>
</lst>
</lst>
<result name="response" numFound="373" start="0">
<doc>
  <str name="id">024451-000879</str>
  <str name="title">「侏儒の言葉」の序</str></doc>
<doc>
--(snip)--
</result>
<lst name="highlighting">
<lst name="024451-000879">
  <arr name="content">
    <str>
「侏儒の言葉」の序
&lt;em&gt;芥川&lt;/em&gt;龍之介

-------------------------------------------------------
【テキスト中に現れる記号について】

《》:ルビ</str>
  </arr>
</lst>
--(snip)--
</lst>
</response>

ハイライトのレスポンスはXML形式の場合、下記のように<lst name=”highlighting”>要素として返されます。

<lst name="highlighting">
<lst name="<ドキュメントのID>">
  <arr name="<フィールド名>">
    <str>スニペット</str>
    [...]
  </arr>
  [...]
</lst>
</lst>

なお、hl.flの指定がない場合ドキュメントIDのリストが返ってきます。スニペットが必要な場合はhl.flパラメータも指定しましょう。

6.4 ハイライト画面

追加したハイライトの画面は以下のようになります。

ハイライト画面

ハイライト画面

“ハイライト”チェックボックスをオンにすると、検索結果とともにハイライトされた単語を含む要約が表示されます。

6.5 プログラムとインストール手順

作成したプログラムがこちら に置いてあります。プログラムは前回同様、以下の手順でインストールできます。

  • プログラム(sample.highlight.tgz) を展開し、ディレクトリを移動します。
  • www/bootstrap.phpファイル内の SOLR_SERVER_* 定数の値を環境に合わせて変更します。
  • 設定変更後、www/以下のファイルをドキュメントルート下に置きます。

6.6 メモ

Solr 4.4.0 インストール

前回は Solr 4.2.1 を利用していましたが、間を空けてたら Solr 4.4.0 がリリースされていました。

Solr 4.3.0 から warファイルの構成が変わり、最初に説明したSolrのインストール方法(warファイルを置くだけ)ではインストールできなくなっています。

warファイルからログ用のjarファイルを外したそうで、warファイルをCATALINA_HOME/webapps 以下に置いた後、別途ログ用のjarファイルをTomcatのライブラリディレクトリに置く必要があります。

Solr 4.4.0 を使う場合、以下の手順でログ用のjarファイルをTomcatのライブラリディレクトリに置いてください。

  • ログ用JarファイルをTomcatのライブラリディレクトリにコピーする
    • $ cp solr-4.4.0/example/lib/ext/*.jar ${CATALINA_HOME}/lib/
  • 設定ファイル log4j.properties をクラスパス上に置く.
    • $ cp solr-4.4.0/example/resources/log4j.properties ${CATALINA_HOME}/lib/

詳細は こちら をご覧ください。

以上です。

著者プロフィール

toza

ミドルウェアから上の層を色々とやってます。長春系八極拳使い。

記事一覧Index