queries of solr

solrのリクエストの種類

Solrでなんかやるやつ3回目。今回はクエリシンタックスについてやります。 とは言いつつも内容はこの記事を元に書いてる。

Solr Query Syntax

過去のものはこちら

  1. Apache Solrを使う
  2. kuromojiで記号を捨てないようにする

検索クエリ

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:イカ /* イカを検索してます */
connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

Jp, Tokyo https://connvoi.com