LoginSignup
2
2

More than 5 years have passed since last update.

intra-mart IM-ContentsSearch用SolrをDockerでたてよう

Posted at

概要

intra-martのIM-ContentsSearchを利用するにあたり、Apache Solrを入れろとあります。
これをdockerでやろうというものです。

まずはDockerHubでベースイメージを探す

intra-mart Accel Platform 2016 Spring (Maxima) リリースノートの、5.1.2.2. Apache Solr システム要件には、次のように記述されています。

5.1.2.2.1. サポートバージョン
Apache Solr 3.6.x

このバージョンを求めて、オフィシャルイメージを探します。

https   hub.docker.com _ solr .png

欲しいバージョンが古すぎなのか、ありません。

intra-mart用のcassandraを立てたときにも同じように古すぎてない、というのを経験したので、慣れっこです。

早く開発本部の中の人とか、本家の人が公開すると良いと思います。

公式の手順に従う

セットアップガイドによると、セットアップツールを使うと、antタスクでjettyサーバでSolrがすぐに動くと。

これをDockerfileに記述します。

FROM java:8-jdk-alpine

ENV SOLR_SETUP_DIR /usr/local/solr

RUN apk --no-cache --virtual=dependencies add wget unzip && \
    wget "http://www.intra-mart.jp/download/product/iap/im_contents_search/solr_setup.zip" && \
    mkdir $SOLR_SETUP_DIR && \
    unzip solr_setup.zip -d $SOLR_SETUP_DIR && \
    apk del dependencies

WORKDIR $SOLR_SETUP_DIR


CMD ["./setup.sh", "jetty.start"]

EXPOSE 8983

これをビルドしたのち、docker runしてやると、jettyサーバ上でSolrが動きはじめます。

docker run -d -p 8983:8983 <ビルドしたイメージ名>

絶対パスと相対パス

Jetty(開発向け)のサーバ起動方法には、以下のようにあります。

Linuxの場合
/usr/local/solr/setup.sh jetty.start

ただ、上のDockerfileでこれをやりますと、こんなエラーになりました。

/usr/local/solr/setup.sh: line 6: build/lib/ant/bin/ant: not found

1.png

相対パスでやると、動くようです。不思議。

2.png

Solrの起動確認

http://<ホスト>:8983/solr/default/admin/

にアクセスし、Solrの管理画面が開けることを確認する。

Solr admin page.png

intra-mart側の設定

システム管理者の画面

Solr接続設定

「システム環境構築」の画面から「Solr接続設定」を開き、「新規作成」を行う。

検索/索引サーバで指定する値は、先ほどSolrの起動確認画面で開いた管理画面のURLからadminを抜いたもの、と思っておけばよさげ。

設定値 備考
接続名 solr-docker 任意の値
検索サーバ http://<ホスト>:8983/solr/default 既定のコア名がdefaultなので
索引サーバ http://<ホスト>:8983/solr/default 既定のコア名がdefaultなので

「テスト接続」を押下して、接続できることを確認します。

接続が成功していると、Solrサーバ側にログが落ちるので、これを確認できます。

docker logs <Solrコンテナ名>

3.png

テナントSolr接続設定

「システム環境構築」で設定したSolrサーバを、テナントに対して割り当てます。

割り当てないと、テナントに対して検索サーバがない、ということになり、検索時にエラーとなります。

テナント管理.png

テナントの画面

コラボレーションのファイルライブラリにファイルを登録するなどして、検索対象を追加します。

IMBoxやワークフローを検索対象としている場合は、それでも可。

ジョブネットの実行

ジョブネット管理画面より「IM-ContentsSearch」の「再作成クローリング」を実施します。

これをやらないと、一生ファイルがSolrのインデックスに追加/反映されないので注意。

ジョブネット管理.png

全文検索の実行

画面右上の方にある検索バーから検索を実行します。 「提案」というキーワードで検索を行った結果は、こんな感じになりました。

全文検索.png

トラブルシューティング

何も検索できないんだけど?

まずは、インデックスがあるかどうかを確認する。

Solrの管理画面にある「Search」ボタンを押して少なくとも何かインデックスがあるかどうかを確認する。

q=: は全件ヒットさせるクエリ。titleがhogeのもの、というものであれば、title:hogeと書けばよい。

0件の場合はこんな結果が返される。 ジョブネットでクローリングを実施したかどうか、その結果がどうかを確認する。

<response>
  <script/>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">2</int>
    <lst name="params">
      <str name="hl.snippets">5</str>
      <str name="hl.useFastVectorHighlighter">true</str>
      <str name="echoParams">all</str>
      <str name="start">0</str>
      <str name="q">*:*</str>
      <str name="rows">10</str>
      <str name="indent">on</str>
      <str name="version">2.2</str>
    </lst>
  </lst>
  <result name="response" numFound="0" start="0"/>
</response>

Indexはあるんだけど、何もヒットしないんです

IM-ContentsSearchでは、検索クエリ内にユーザのロールや所属会社などのACL情報を付与することで、権限に応じた検索を行っているようです。

このため、権限がないので、インデックスはあるのにヒットしねー ということがあります。

Solrサーバに投げられた検索クエリをもとに推測します。

docker logs <Solrコンテナ>

例えば、「提案」という言葉で検索したとすると、こんなログが出ます。

4.png

params以下に着目します。

sids_allowedというフィールドに対してフィルタクエリーを発行しているため、fq=(sids_allowed:・・・) で指定されている部分を削っても、検索結果が得られないかどうかをみます。

http://:8983/solr/default/select/?paramsの内容

これで検索結果が得られるのであれば、権限がない。これでも得られない場合は、検索キーワードに合致するインデックスがない、ということになると思います。

それでも・・・

やっぱり最新のものが使いたい、という思いもあるので、Solr6.1に置き換えるのも検討中。

managed-schemaとsolrConfig.xmlの変更で行けそうな予感。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2