查詢運算符
例如:http://localhost:8984/solr/mycore/select?q=*:*
:? 指定字段查指定值,如返回所有值q=*:*
?? 匹配單個字符, 例如: q=title:??拳 可以匹配標題為“形意拳”的文檔
*? 匹配零個或多個字符, 例如: q=title:*形意拳 或者?q=title:*拳 都可以匹配標題為“形意拳”的文檔
~? 表示模糊檢索, 例如:q=title:xoodcopping~0.8 可以匹配到標題為“Woodchopping”的文檔, 但是q=title:xoodcopping~0.9 就無法匹配到, ~后面的數組在0~1之間,數值越大相似度越高。
AND 與操作符,例如: q=title:形意拳 AND type:sport 可以匹配到標題為形意拳并且類型為sport的文檔
OR? 或操作符,例如:?q=title:形意拳 OR title:悠波球 可以匹配到標題為形意拳或者悠波球的文檔
NOT 非操作符, 例如: q=type:sport NOT title:悠波球 可以匹配到所有類型為sport但是標題不是悠波球的文檔
! 非操作符, 例如:?q=type:sport?!title:悠波球 可以匹配到所有類型為sport但是標題不是悠波球的文檔
- 非操作符, 例如:?q=type:sport -title:悠波球 可以匹配到所有類型為sport但是標題不是悠波球的文檔
+? 存在操作符,要求符號”+”后的項必須在文檔相應的域中存在
()? 用于構成子查詢, 例如: q=type:sport AND ( group:sport OR title:悠波球 )
[]? 包含范圍檢索,如檢索某時間段記錄,包含頭尾,例如: q=date:[201507 TO 201510]
{}? 不包含范圍檢索,如檢索某時間段記錄,不包含頭尾, 例如:?q=date:{201507 TO 201510}
?
查詢參數
q 指定查詢條件, 條件項目以":"分割屬性和值, 支持多個條件和子查詢, 參考上面的查詢運算符。
fq 過濾條件,格式同參數q,fq是在使用q參數查詢完成后,再針對結果進行過濾。
sort 結果排序方式,支持desc和asc兩種方式,例如:sort=score desc, price asc, sum(x_d, y_d) desc;? 當不指定sort參數時,將會使用隱藏字段score進行desc排序。?
start 結果偏移起始量
rows 返回結果的數量,配合start參數可實現分頁的查詢
fl Field List,指定返回結果中包含的字段, 默認返回除score等隱藏字段之外的所有字段,等同于fl=*,返回指定字段例如:fl=name, age
df Default Field 默認查詢的字段,如果在q中沒有指定字段,例如:q=michael 的時候指定默認的字段 df=name, 等同于q=name:michael
wt 響應的數據格式,支持格式:csv,geojson,javabin,json,php,phps,python,ruby,smile,velocity,xlsx,xml,sxlt
?
命令行操作
啟動solr服務器?
# solr start -p 8984
創建core
# solr create_core -c mycore?
?
常用操作
增加文檔
<add><doc><field name="id">1</field> <field name="name">四格</field> <field name="introduction">最長在家半年的死宅,三周熱度,三天打魚兩天曬往</field> </doc> </add> <commit/>
?
問題
Solr中的q與fq參數的區別在那兒?
原文鏈接:http://www.highersoft.net/html/notice/notice_311.html
今天遇到一個問題,把相同的參數比如name:張三,放到q與fq,兩者返回的結果完全不一樣。
?經過debug發現,原因是這兩個參數是solr查詢的不同階段使用的,所以結果不一樣。
?如果用于q。那么,就會查所有name中包含"張三"的,然后order by score,這時就會按name的相似度來排序。
而如果用fq,q設置為*:*。那么solr會先order by score,而因為條件是*:*,所以所有文檔的相關性都是一樣的,所以即使用fq過濾了,返回的最前面的卻不是相關性最高的。
綜上所述,以相關性(score)為優先排序條件的,那么條件一定放在q參數中。
?