solrのリクエストの種類
Solrでなんかやるやつ3回目。今回はクエリシンタックスについてやります。 とは言いつつも内容はこの記事を元に書いてる。
過去のものはこちら
検索クエリ
fieldnameがtextからhelloを検索する
text:hello
フレーズクエリ
完全一致のクエリ。”イカ ゲソ焼き”のみにマッチする。イカ マヨ ゲソ焼き にはマッチしない。
text:"イカ ゲソ焼き"
Proximity Query(近接クエリ)
~と数字で表す。この場合、”イカ マヨ ゲソ焼き”にはマッチするが、”イカ マヨ 辛子 ゲソ焼き” にはマッチしない。
text:"イカ ゲソ焼き"~1
Boolean Query( +, - , AND, OR, NOT)
ANDは+, -はNOTと同じ。スペース(空白)はORとなる。
+イカ +マヨ 辛子 -ゲソ焼き
イカ AND マヨ OR 辛子 NOT ゲソ焼き
このクエリは等価になる。
Boosted Query (クエリのブースト)
^(ハット)をつけると特定のワードのスコアを変更できる(重み付け)
text:イカ^10 text:ゲソ焼き /* イカにヒットして10点、ゲソ焼きにヒットで1点 */
inStock:true^100 text:ゲソ /* inStockがtrueだと100点、ゲソにヒットして1点 */
範囲クエリ(Range Query)
範囲を指定した検索クエリ
age:[18 TO 30] /* 18~30の間のageがヒットする */
age:[18 TO 30} /* 18<= x < 30 になる*/
age:[18 TO *] /* 18<= x */
age:[* TO *] /* ageがセットされているものすべて*/
[* TO *] はセットしてあるものがすべてヒットするので、頻繁に使う。 範囲検索は文字列にも有効
text:[apple TO banana] /* apple banana間にあるワードにマッチする */
Consistent Score Query
通常のスコアの計算を無視して、クエリのスコアを優先する
+color:イカ^=1 text:ゲソ
Filter Query
Query内にfqに指定するfilterクエリを書くことができる。また、filter cacheからデータを回収するので、スコアの再計算がいらず高速に。
description:HDTV OR filter(+promotion:tv +promotion_date:[NOW/DAY-7DAYS TO NOW/DAY+1DAY])
fqパラメーターはfield同士はANDでつなぐことしかできなかったが、lucene query内にかける事によってその制約はなくなる。 ただ、fqでできて、fqのfilter cacheを利用できるなら無理に使う必要もない。
Query Comments
Query内にコメント書くことができる。
text:イカ /* イカを検索してます */