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等の形式にも切り替えられる
--レスポンスライタ一覧----------
javabin SolrJで使われるJavaBin形式
----------------------------
indent trueの場合、返ってきた結果が綺麗にインデントされ見やすくなる。
debugQuery trueの場合、デバッグ情報が出力される
defType クエリパーサのタイプ。lucene, dismaxなどを指定
timeAllowed 指定された時間(ミリ秒指定)で検索を撃ち切って結果を返す。検索画面では入力欄なし。(管理画面)
検索式(検索クエリ)
単語による検索
検索式の例: Apache
解説: 入力された単語で検索。検索対象となるフィールドは検索リクエストパラメータのdfにて指定されたフィールド
フィールド指定検索
検索式の例: フィールド名:検索語 (id:1)
解説: 「フィールド名」で指定されたフィールドに対して「検索語」で検索。フィールド名と検索したい単語を「:」(コロン)で区切る
論理演算子 AND OR NOT
検索式の例:
解説: 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のクエリの書き方やパラメータを紹介させていただきました。