Solrで検索する時にboost値を設定する(Extended DisMax)

■ Document Boost
 
JavaでSolrにインデクシングするプログラムを書く時に、
SolrInputDocumentっていうクラスを使ったりしますが、
特定のフィールドの重要度を上げたいな、という時は
↓のメソッドを使って第3引数にfloatで重み付けします(デフォルトは1.0)
addField(java.lang.String, java.lang.Object, float)
 
コレでイイじゃんって言われればそれまでなのですが、
重要度をコロコロ変えて、どんな感じに影響があるか確認しながら検索したい時に、
都度ドキュメントをインデックスし直して、、ってかなり面倒な事になります。
 
 
■ Query Boost
 
インデックスする時にboost値を設定するのが面倒な事になるんだったら、
検索する時に設定してしまえばイイじゃない、というアレです。
 
DisMaxというコンポーネントを使うと実現出来るということで、調べてみます。
 
・DisMaxとは
http://wiki.apache.org/solr/DisMaxによると、
DisMaxは Disjunction Max の略語で、”分離されたMax”という事です。
って、何じゃソリャっていう話しなわけですが、ちゃんと先まで読んでいくと、
丁寧に解説されています。
 
・Disjunction

Disjunction refers to the fact that your search is executed across multiple fields,
e.g. title, body and keywords, with different relevance weights

→複数項目をまたいでサーチした時に、それぞれの適切なウエイトを〜っていう。
 
・Max

Max means that if your word “foo” matches both title and body,
the max score of these two (probably title match) is added to the score,
not the sum of the two as a simple OR query would do.
This gives more control over your ranking.

→例えば”foo”で検索した時にtitleもbodyも引っかかったとすると、max scoreに加算されますが、
 上記2項目ヒットの単なるサマリじゃない感じです、と。#probably title matchってどゆ意味だろう…
 (tf-idfとかでゴニョゴニョしてて、debugQuery=onとかで見てやると分かりやすいかな、と。)
 んで、この機構を使ってランキングをコントロール出来るっす的な。
 
 
■ Extended DisMax
 
Solr3.1以降で使えるDisMaxの拡張みたいな事らしいのですが、
http://wiki.apache.org/solr/ExtendedDisMaxを読んでみると、
↓みたいな記述が出てきたりして、OnGoingな感じなのねぇっていう印象を受けます。

Solr3.6 You can choose which fields the end user is allowed to query,
and choose to disallow direct fielded searches if wanted.

 
使うのに何か設定がいるのかと思いきや↓のようにクエリパラメータに
defType=edismaxて入れたら良いみたいです。

Extended DisMax is already configured in the example configuration,
with the name edismax. Thus, to select the parser,
use defType=edismax in your query

 
イロイロなパラメータがありますが、 とりあえず qf (Query Fields) で
検索する項目とブースト値を設定出来るっていうのだけ抑えておけばイイのかな、と。。
 
具体的にはExampleに記載されているように以下のような感じです。(実際は一行)

http://【SolrサーバのURL】/solr/select/
?
q=検索文字列
&
defType=edismax – コレでExtended DisMaxを使うっていう宣言
&
qf=フィールドA^20.0+フィールドB^0.3 数字がブースト値。クエリシンタックスは※1
&
debugQuery=on – 動作確認用。デバッグ情報を出力してくれる

※1 Luceneのクエリで使える機能はひと通り使えます↓Wikiより。

This parser supports full Lucene QueryParser syntax
including boolean operators ‘AND’, ‘OR’, ‘NOT’, ‘+’ and ‘-‘,
fielded search, term boosting, fuzzy, grouping with parens,
phrase search, phrase slop, numeric ranges, wildcard search and more

 
 

コレでテストデータをインデックスして検証して、
ブースト値変えてインデックスし直して検証して、、
っていう煩わしい作業から解消されます。。
 

Apache Solr入門 ―オープンソース全文検索エンジン
関口 宏司 三部 靖夫 武田 光平 中野 猛 大谷 純
技術評論社
売り上げランキング: 69825

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中