■CALENDAR■
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31   
<<前月 2017年08月 次月>>
■LOGIN■
現在のモード: ゲストモード
USER ID:
USER PW:
■ADMIN■
ADMIN ID:
ADMIN PW:
■NEW ENTRIES■
■RECENT COMMENTS■
■CATEGORIES■
■ARCHIVES■
■PROFILE■
■POWERED BY■
BLOGN(ぶろぐん)
BLOGNPLUS(ぶろぐん+)
■OTHER■

【Solr】クエリパラメータについて
正直まだ調査中のところが多いのです。
今の時点でも結構精度はよくなってきてはいるのですが形態素解析の悪いところが出るケースもあります。
辞書に登録されていないものに関してはうまく行かないことがあります。
後はLike検索がうまく言ってない場合も。
なのでこのエントリーでは引用を中心に書きます

↓参考サイト
[Lucene] Query Parser Syntax|ミ通信(本編)
http://ameblo.jp/miralis/entry-10289721378.html
Ride(らいど)の技術メモ
http://alexride.blog83.fc2.com/blog-entry-6.html

クエリパラメータ
■qt
 クエリータイプで、標準はstandard。
 詳細は現在調査中。
■wt
 検索結果のフォーマットを指定できる。
xml:XML形式
    json:JSON形式
 他は各言語の型の形式っぽいけど使ったことないので不明。
 これも設定で変えられるみたい。でもXMLとJSONありゃ十分かな。
 http://wiki.apache.org/solr/QueryResponseWriter
 
■sort :sort
 昇順/降順の指定は「フィールド名 asc|desc」と記述します。
 複数のフィールドを使用する場合、カンマ区切りで列挙します。
 ここでも半角空白をsolrへGETパラメートして渡せないので、urlencode()を行ないます。
 【例】sort=ins_date+desc%2Cfoo_id+asc
■start
 開始の
■rows :rows
 取得する個数。
■fq :filter_queries
 
■fl :filter_list
 
■facet
 ファセット検索を実行する場合true
■facet.field
 ファセットの対象にするフィールドを指定
■facet.query
■facet.prefix
 先頭文字列がこれに一致するタームに対してファセットを実行
■facet.sort
 trueを指定するとカウントでソートを実行
■facet.limit
 ファセット結果の件数を制限。負の値にすると無制限。デフォルトは100
■facet.offset
■facet.mincount
■facet.missing
 trueを指定するとヒットしなかった件数を計算

■q
 検索のワードを問合せパラメータで、必ず指定する必要がある。
 いろんな指定ができる。

▼Boolean Operator
・OR
「"jakarta apache" jakarta」
「"jakarta apache" OR jakarta」
"jakarta apache"か"jakarta」が含まれる文章を検索して、結果を戻します。

・AND
「"jakarta apache" AND "Apache Lucene"」
"jakarta apache" と "Apache Lucene"を含むドキュメントを検索して、返します。

・+
「+jakarta lucene」
"jakarta"を必ず含んで、luceneを含むかもしれない文章を検索して、返します。

・NOT
「"jakarta apache" NOT "Apache Lucene"」
"jakarta apache"を含んで"Apache Lucene"を含まない文章を検索して、返します。
ひとつの語句だけにNOTはつかえない。
(例)「NOT "Apache Lucene"」→結果を返さない

・-
NOTと一緒

▼Grouping
()を使う。

「(jakarta OR apache) AND website」
正規表現と一緒とおもわれます。
jakarta か apacheを含み、websiteを含むドキュメントを検索して、返します。


▼Field Grouping
検索するfieldを指定して、Groupingします。
「title:(+return +"pink panther")」
titleというフィールドに"return"と"pink panther"を含むドキュメントを検索して、返します。

▼特殊文字のエスケープ
特殊文字は「+ - && || ! ( ) { } [ ] ^ " ~ * ? : 」で、こちらをエスケープするためには、
、これらの文字の前に「/(¥)」をつけます。

「¥(1¥+1¥)¥:2」
→(1+1):2 というクエリを発行する

▼検索オプション
・Wildcard Searcher
  ?:一文字のワイルドカード
  *:複数文字のワイルドカード

  「te?t」:text, testとかがマッチ
  「text*」:text, texts とかマッチ
  「t*xt」:taxt, taaaxtとかまっち
 
 ※ただし、「*」や「?」は、最初の文字には使えない(NG: *st)

 ・Fuzzy Searcher
   あいまい検索。Levenshtein DistanceやEdit Distanceといったアルゴリズムを使っている
     「roam~」:foamやroams等がマッチ

▼その他
・すべてのドキュメントをヒットさせる場合には、"*:*"

・fieldが空でないdocumentを検索する
 SQLの"IS NULL"や"IS NOT NULL"のように、特定のfiledが空ではない(or 空である)documentを検索する方法。
 
 Searching for null (empty) fields, how to use -field:[* TO *]

  例えば、titleというフィールドが空でないというクエリーは、

    title:[* TO *]

  となり、titleが空であるという条件は↓のようになります。

    -title:[* TO *]


・フィールドを指定して検索を行なう場合
    フィールド名:1001

・単価を範囲指定
    tanka:[5000 TO 10000]
 
・日付の範囲指定
    yukodate:[2009-02-01T00:00:00Z TO 2009-02-28T23:59:59Z]

 solrの日付フォーマットは「YYYY-MM-DDT00:00:00Z」です。
 日付と時刻の間に「T」を、時刻の後ろに「Z」が必ず必要です。
 上記の例ではphpでurlencode()をするときに「-」や「:」がデコードされないように「」を入れています。

※注意事項
▼solrではGETパラメータの半角空白は区切り文字として扱われるので「+」に変換する。
 phpの場合、urlencode()は、javaもurlencode()で。
 但し、範囲指定の場合は「[」「]」がありurlencode()出来ないので直接「tanka:[5000+TO+10000]」と記述しています。

▼solrでは「q」パラメータは必須となっています。
 検索条件がフィルタだけで済む場合でも「q」パラメータを指定しないといけないので下記のように記述します。
 
q=*:*
 「*:*」は全件という意味です。
| http://www.schwarzefarbe.net/blognplus/index.php?e=420 |
| 技術系::solr | 06:36 PM | comments (0) | trackback (0) |










http://www.schwarzefarbe.net/blognplus/tb.php/420
PAGE TOP ↑