もう眠いんだ、寝させておくれ

ちょっと道草食べ過ぎた人のブログ

Apache Solr -もう誰も苦しまないように

今回はApache Solrについて書きます。

さんだApache Solrで苦しみましたとも、ええ

これから説明していきます。

 

 

まず前提条件

Apache solrのバージョンは4系(4.5.0)を対象とします。

 

 

検索リクエストパラメータ

q    検索式 (後に記述します。)

fq   フィルタクエリ(絞込検索)

sort  ソート(field名 asc or desc) ※ソート対象を複数設定できます。

start  デフォルト値は0 開始行番号を0以上の値で指定

rows  デフォルト値は10 取得件数を0以上の値で指定

fl  デフォルト値*  取得したいフィールド名を指定

df  デフォルト検索フィールド ※フィールド指定がない場合に検索対象とするフィールド名を指定

 

wt  レスポンスライタのタイプ ※管理画面の検索結果がデフォルトではXMLで返る、json等の形式にも切り替えられる

--レスポンスライタ一覧----------

xml これはデフォルト(XML形式の結果を返す)

json  json形式の結果を返す

javabin SolrJで使われるJavaBin形式

python pythonシリアライズ形式

ruby rubyシリアライズ形式

php phpのeval関数形式

phps phpシリアライズ形式

csv CSV形式で返す

----------------------------

indent trueの場合、返ってきた結果が綺麗にインデントされ見やすくなる。

debugQuery trueの場合、デバッグ情報が出力される

defType クエリパーサのタイプ。lucene, dismaxなどを指定

timeAllowed 指定された時間(ミリ秒指定)で検索を撃ち切って結果を返す。検索画面では入力欄なし。(管理画面)

 

 

検索式(検索クエリ)

単語による検索

検索式の例: Apache

解説: 入力された単語で検索。検索対象となるフィールドは検索リクエストパラメータのdfにて指定されたフィールド

 

フィールド指定検索

検索式の例: フィールド名:検索語 (id:1)

解説: 「フィールド名」で指定されたフィールドに対して「検索語」で検索。フィールド名と検索したい単語を「:」(コロン)で区切る

 

論理演算子 AND OR NOT

検索式の例: 

text:Google AND text:Apple

text:Google OR text:Apple

text:Google NOT text:Apple

解説: AND(論理積)、OR(論理和)、NOT(否定)による検索式の組み立てが可能。NOTは直後の条件の否定

 

論理式のグループ化

検索式の例: (text:Google OR text:Apple) AND genre:パソコン

解説: ()で囲まれた論理式が先に評価される。

 

範囲検索

検索式の例:

pages:[0 TO 100]

pages:{0 TO 100}

pages:[* TO 100]

pages:[C TO D]

 

解説: 「[]」は開始、終了を含む条件、「{}」は開始、終了の値を含まない条件になる。「*」を利用することで100以下のすべてといった条件も可能。その逆も然り。

 

ワイルドカード検索

検索式の例: 

genre:パソコン??

genre:パソコン*

 

解説: インデックスの上の単語に対して前方一致で検索する。「?」(1文字), 「*」(0文字以上)を意味する。ワイルドカード検索文字は検索式の先頭の文字に指定することはできない。

 

フレーズ検索

検索式の例: title: "Web プログラミング"

解説: 2つ以上の単語の出現順序を保証した検索

 

重み付け検索

検索式の例: text:Google^0.5 OR text:携帯^2.0

解説: 「^」(ハット)の後に続けて数値を指定して、検索項目の重みを変える

 

 

グルーピング検索

group 

デフォルト: false

解説: グルーピング検索を使用する場合はtrue、使用しない場合はfalse

 

group.field

デフォルト: なし

解説: グループ化する対象のフィールドを指定。マルチバリューでないインデックス済み(indexed=true)フィールドが条件

 

group.ngroups

デフォルト: false

解説: グループの件数を表示する場合はtrue、表示しない場合はfalse。(group.main=trueの場合は表示不可)

 

みたいな感じです。

今回は、Apache Solrのクエリの書き方やパラメータを紹介させていただきました。