概要

「Advanced Search adapter for Solr」はOmeka Sのモジュールであり、Apache Solrの高度な検索アダプタを提供します。これにより、Omeka内で完全な検索エンジンの力を活用することができます。これは一般のユーザー向けや管理者向けに、関連性(スコア)による検索、インスタント検索、ファセット、オートコンプリート、提案などの機能を提供します。

https://github.com/Daniel-KM/Omeka-S-module-SearchSolr

Apache Solrのセットアップ

!

Apache Solrは、Omeka Sがインストールされたサーバとは異なるサーバにインストールしても構いません。

Javaをインストール可能な環境で、Apache Solrのセットアップを行います。Ubuntuの場合、以下のサイトなどが参考になりました。

https://tecadmin.net/how-to-install-apache-solr-on-ubuntu-22-04/

以下のようなコマンドでApache Solrを起動できます。

#s#w#t#s#sugauuJderddaotoovxaahzbsptfayttsspshtusoep:lmd/r/ca/-ittd9nlel.sc3ts&d.at&n0la..lrsat_tupgsdazosoclohsrlaeo_rp.lstorer-rig9vn/.iss3cto.eal0.lr/sl/bhsi-onsyl/orild/nre9s-f.t9a3a.u.l3l0l.t/_0-ss.jootdllgkrrz-_9s.e3r.v0i.cteg.zsh-strip-components=2

また、mycol1というコアを作成しておきます。

sudosu-solr-c"/opt/solr/bin/solrcreate-cmycol1-ndata_driven_schema_configs"

モジュールのインストール

!

ここからは、Omeka Sがインストールされたサーバで作業します。

以下のページからモジュールをダウンロードおよびインストールします。

https://github.com/Daniel-KM/Omeka-S-module-SearchSolr/releases

インストール時に、以下のように、AdvancedSearchが必要、というアラートが表示されることがあります。

その場合、以下のモジュールを事前にインストールおよび有効化してから、再度Advanced Search adapter for Solrのインストールをお試しください。

https://omeka.org/s/modules/AdvancedSearch/

Apache Solrとの接続

管理画面左側の モジュール > Search manager から以下の画面にアクセスします。

</admin/search-manager>

「Solr cores」にあるデフォルトのコアについて、鉛筆ボタンを押して、以下のページにアクセスします。このページにおいて、「IP or hostname」のフォームに、Apache SolrをインストールしたサーバのIPアドレスまたはホスト名を入力します。また「Solr core」には、先ほど作成したコア(ここでは、mycol1)を入力します。

</admin/search-manager/solr/core/1/edit>

正しく設定できた場合、以下の画面のように、「状態」がOKになります。これで、Omeka SとApache Solrの接続が接続されたことになります。

インデックスとページの作成

ここでは、インデックスやページの作成を行い、Omeka Sでの検索画面の表示までを行います。

In Search admin

再度、以下の画面にアクセスします。

</admin/search-manager>

Add search engine

上記の画面において、画面右上の「Add new search engine」ボタンを押します。以下の画面において、適当な名前を入力して、「Adapter」項目で「Solr」を選択します。

そして、以下の画面で、「Reindex」のアイコンをクリックします。以下の画面右のように、再インデックスに関するブロックが表示されるため、「Confirm reindex」ボタンを押します。

これにより、Omeka SとApache Solrの同期が行われます。再インデックス完了後、Apache Solr側の管理画面を見てみると、(ここでは、3件の)ドキュメントが登録されていることが確認できます。

Create a page

次に、ページを作成します。再度、Search managerの管理画面にアクセスして、画面右上の「新規ページを追加」ボタンを押します。

以下の画面に遷移後、必須項目を入力します。以下が例です。

項目
名前page1
Pathfind
Search engineengine1(先ほど作成したengineの名前)
FormMain

また、「Availability on sites」はとりあえず「Make available in all sites」を選択しておきます。

In admin or site settings

次は、Omeka Sのサイトに、作成したページを追加します。作成済みのサイト一覧から特定のサイトを選択して、「ナビゲーション」を選択します。以下の画面において、画面右側の「カスタムリンク追加」から「Advanced search page」を選択して、先ほど作成したページの名前(ここでは、page1)を選択します。

結果、以下のようなパス(先ほど設定したPath)で、Apache Solrへの問い合わせ結果を表示する検索ページにアクセスすることができます。

https://omekas.aws.ldas.jp/omeka4/s/default/find

ただし、ここまでの設定では、ファセットなどの設定ができていないため、以後、各種設定を行います。

設定

Facet

まずファセットの設定方法について説明します。

Search managerページから、先ほど作成したページ(ここでは、page1)の鉛筆アイコンをクリックします。

以下の画面において、画面上部のタブ「設定」を選択します。

</admin/search-manager/config/1/configure>

そして、以下のように、「Facets」と表示されている項目を編集していきます。

「Available facets」に表示されている行から、必要な行をList of facetsにコピペします。ここでは、以下のフィルタを追加してみます。

dcterms_subject_ss = Subject =

結果、先ほど作成したOmeka Sのサイトのページにファセットが表示され、値に基づく絞り込みができるようになります。

フィルター

次に、検索条件を指定するフィルタの設定方法です。

先のファセットと同様、「Available filters」に表示されている行から、必要な行をFiltersにコピペします。ここでは、以下のフィルタを追加してみます。

dcterms_subject_ss = Subject = =

</admin/search-manager/config/1/configure>

結果、以下のように、「キーワード/Subject」のフォームが追加されました。

Advanced filters

「Advanced filters」は、利用者がフィルタの条件を動的に変更可能なフォームです。例えば、「Subject」と「Date」を「Advanced filters」に追加してみます。

サイトの検索ページにおいて、以下のようなフォームが表示されます。

日付11含むで検索した例です。2020-11-24日付にもつアイテムのみが取得できました。

その他

以下のような形で登録してみます。

dcterms_subject_ss = Subject = Select = あかちゃん |医療

すると、以下のような形で、セレクトボックスとして利用できるようになりました。

ソート

https://omekas.aws.ldas.jp/omeka4/s/default/find

日本語対応

はじめに

上記の設定において、例えば、タイトルだけでも、以下の3種類のありました。これらは、Apache Solrへのインデクシングのされ方の違いを示しています。

  • dcterms_title_s = Title
  • dcterms_title_txt = Title
  • dcterms_title_txt_ja = Title

例えば、文字列「横から見たオムツ姿の赤ちゃんのイラスト」を例とした場合、以下のようになります。

項目タイプターム
dcterms_title_sstring横から見たオムツ姿の赤ちゃんのイラスト
dcterms_title_txttext_general横,か,ら,見,た,オムツ,姿,の,赤,ち,ゃ,ん,の,イラスト
dcterms_title_txt_jatext_ja横,見る,オムツ,姿,赤ちゃん,イラスト
dcterms_title_txt_cjktext_cjk横か,から,ら見,見た,たオ,オム,ムツ,ツ姿,姿の,の赤,赤ち,ちゃ,ゃん,んの,のイ,イラ,ラス,スト
  • *_txtStandardTokenizerFactoryトークナイザー(?)が適用され、連続するカタカナは1ターム、その他は1文字単位でインデックスされるようでした。(あまり自信がありません。)
  • *_txt_jaJapaneseTokenizerFactoryトークナイザーなどが適用され、形態素でインデックスされています。
  • *_txt_cjkCJKBigramFilterFactoryフィルタが適用されるため、2文字ずつインデックスされます。

上記のような違いがあるため、Omeka SのフィールドをApache Solorでどのように扱うかを、目的に応じて設定する必要があります。

CJKフィルタ

solr map

例えば、タイトルの値を2文字ずつインデックスする*_txt_cjkを追加してみます。

Search managerの画面で、Solr coreの「Map Omeka metadata and Solr fields」を選択して、「Resource(またはItem)」を選択して、画面右上の「Add new map」ボタンを押します。

以下のような画面に遷移するので、「Solr field」で「*_txt_cjk」を選択します。

その後、再インデックスなどを行います。

Filters

そして、先ほどのFiltersの設定を参考に、「dcterms_title_txt_cjk」を以下のように追加してみます。

</admin/search-manager/config/1/configure>

サイト

この結果、以下のような違いが生まれます。

dcterms_title_s=イラストによる検索では、横から見たオムツ姿の赤ちゃんのイラストなどの文字列でインデックスされるため、完全に一致するアイテムがなく、結果が0件になります。

一方、dcterms_title_txt_cjk=イラストによる検索では、イラ,ラス,ストなどの文字列でインデックスされており、検索語のイラストも同様に処理されるため、文字列イラストを含む2件のアイテムがヒットします。

参考

_txt_cjk_txt_ja、それぞれのインデックスのされ方を確認します。

_txt_cjk

対象文字列

  • 横から見たオムツ姿の赤ちゃんのイラスト
  • 【タイトルを更新】赤ちゃんの胸囲の測定のイラスト
  • iiif presentation api v3のマニフェスト

結果

</solr/#/mycol1/schema?field=dcterms_title_txt_cjk>

Term FrequencyTerm
3スト
2イラ
ゃん
んの
のイ
ラス
赤ち
ちゃ
1ら見
の赤
たオ
フェ
ムツ
を更
presentation
の胸
オム
の測
から
ェス
タイ
ツ姿
トル
ニフ
測定
マニ
のマ
更新
ルを
囲の
定の
姿の
イト
横か
v3
胸囲
見た
iiif
api

英語を除き、2文字ずつに分割した文字列がインデクシングされていることが確認できます。

例えばストが3件になっていますが、イラストマニフェストの両方に含まれているためであることがわかります。

_txt_ja

対象文字列

  • 横から見たオムツ姿の赤ちゃんのイラスト
  • 【タイトルを更新】赤ちゃんの胸囲の測定のイラスト
  • iiif presentation api v3のマニフェスト

結果

</solr/#/mycol1/schema?field=dcterms_title_txt_ja>

Term FrequencyTerm
2赤ちゃん
イラスト
1iiif
v
オムツ
マニフェスト
タイトル
姿
更新
presentation
測定
胸囲
見る
api
3

助詞などが除外され、赤ちゃんイラストといった形態素に分解されてインデクシングされていることが確認できます。

比較

dcterms_title_s=ストでは、0件の結果が得られます。イラストマニフェストという形態素でインデックスされているためです。

一方、dcterms_title_txt_cjk=ストでは3件の結果が得られます。しかし、dcterms_title_txt_cjk=イラストだと検索結果数は2件になります。これは、イララスストの3つ全てがインデックスに含まれるデータのみがヒットするため、イラストという文字列を含むデータはヒットする一方、マニフェストという文字列を含むデータはヒットしないことになります。

まとめ

Omeka SとApache Solrの接続方法について紹介しました。Omeka Sで形態素解析などを含む高度な検索を行いたい場合には、有用な選択肢になるかと思います。

不正確な内容を一部含むかもしれませんが、参考になりましたら幸いです。