[Solr]suggestコンポーネントの話

1.5K Views

June 06, 22

スライド概要

Solrのsuggestコンポーネントについて社内勉強会で話した資料になります。

profile-image

LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

[Solr] suggestコンポーネントの話 株式会社LIFULL 社内勉強会用資料 検索エンジンチーム 寺井 輝

2.

今日の内容 ・Solrのsuggestコンポーネントについて ・サーチコンポーネントの定義 ・リクエストハンドラの定義 ・フィールドタイプの定義 実践: ひらがなで漢字のサジェストが出るようにしてみた件 2

3.

suggest コンポーネントとは ・いい感じに検索キーワードの入力補完などができる機能 ・Solr4.7から実装 ・LuceneのSuggesterが使われており、オンメモリで動作するため高速 ・とはいえ日本語は難しいのでそれなりに調整が必要 3

4.

suggest 使い方 ① solrconfig.xml 内に Suggest の Search Component を追加する solrconfig.xml 4

5.

solrconfig.xml suggest のサーチコンポーネント 詳しく name: サジェスターを識別する名前 lookupImpl: サジェストキーワードの検索方法 - AnalyzingLookupFactory にすると好きなアナライザを使用可能 suggestAnalyzerFieldType: どのフィールドタイプを使ってサジェスト語句を解析するか field: 実際にサジェストに出す時にこのフィールドから用語を出す buildOnCommit: trueだとソフトコミット後にルックアップデータ構造が再構築される。 falseだと suggest.build=trueリクエスト時のみビルド teraimode というサジェスターを使うと、 suggestall というフィールド内の語句から、 terai_string というフィールドタイプによる用語解析を行い、その結果をサジェストとして出す 5

6.

リクエストハンドラを追加 ② サーチコンポーネントを定義したらリクエストハンドラを定義 ➔ /suggestでサジェスターを呼ぶことができる solrconfig.xml 6

7.

さっき指定した terai_string フィールドタイプの定義は こうなっています (省略) schema.xml ↑ 形態素解析で単語をいい感じに分割 ↑ 漢字に読みがなを振る= ひらがなで漢字のサジェストが出るようになる(useRomajiがあ るとローマ字でもヒットする) terai_string フィールドタイプはこれらのフィルターが順番にかかって語句の解析が行われる 7

8.
[beta]
定義の追加でどう変わったのか
teraimode というサジェスターでは、terai_string というフィールドタイプのアナライザを使用
→ JapaneseReadingFormFilterFactory を追加したのでひらがなでサジェストが出るはず!
curl -s
'http://localhost:8983/solr/bukken/suggest?suggest.dictionary=default
&q=%E3%81%AD%E3%82%8A'
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0},
"suggest":{"default":{
"ねり":{
"numFound":0,
"suggestions":[]}}}}

ふりがなサジェスト無しの場合

curl -s
'http://localhost:8983/solr/bukken/suggest?suggest.diction
ary=teraimode&q=%E3%81%AD%E3%82%8A'
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0},
"suggest":{"teraimode":{
"ねり":{
"numFound":4,
"suggestions":[{
"term":"練馬区",
"weight":23920,
….

ふりがなサジェスト有りの場合
8

9.
[beta]
ローマ字でもサジェスト出ます!!
useRomaji=”true” にしたのでローマ字でも検索可能になった!
curl -s
'http://localhost:8983/solr/bukken/suggest?suggest.dictionary=teraimode&q=neri
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0},
"suggest":{"teraimode":{
"neri":{
"numFound":4,
"suggestions":[{
"term":"練馬区",
"weight":23920,
"payload":""},
{
……...

9

10.

まとめ Solrにsuggestコンポーネントを追加した • lookupImpl に AnalyzingLookupFactory を設定すると好きなフィールドタイプで解析可能 • suggestAnalyzerFieldType に語句解析用のフィールドタイプを設定できる • リクエストハンドラを定義 + サーチハンドラに登録すると使用できる 日本語の読み仮名でサジェストを出すには... JapaneseReadingFormFilterFactory の入ったフィールドタイプをサーチコンポーネントに設定すると良さそう 結果: 入力補完みたいなことができる!! 10

11.

参考 Solrリファレンス: https://solr.apache.org/guide/8_8/suggester.html [改訂第3版]Apache Solr入門――オープンソース全文検索エンジン: https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E7%AC%AC3%E7%89%88-Apache-Solr%E5%85 %A5%E9%96%80%E2%80%95%E2%80%95%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E 3%82%BD%E3%83%BC%E3%82%B9%E5%85%A8%E6%96%87%E6%A4%9C%E7%B4%A2%E3%82 %A8%E3%83%B3%E3%82%B8%E3%83%B3-Software-Design/dp/4774189308 11