solr查詢語法
還以為網上的solr最基礎的東西應該很多,結果發現je這邊都是一些部署的資料。到沒用人給最基本的查詢語法。在做查詢時十分吃力,自己整理了幾個例子來分享下,希望別人不要再走彎路。
首先說下,查詢都是基於solrj。如果不清楚solrj。可以當做是對solr查詢語句的一個api封裝。
solr的查詢其實都是向select這個servlet穿字元型的引數,例如:
Solr程式碼- http://192.168.1.107:8983/solr/collection1/select?q=*%3A*&wt=xml&indent=true
查詢的欄位格式一般是: 欄位名: 欄位值
說明號會被urlcoding,變成“%3A。”
我沒有看過solrj的原始碼。但是應該是將對select這個servlet的請求通過httpclient的方式的一種實現。
進入正題:
首先需要例項化 SolrQuery 物件,用來做要查詢的引數集合。
Java程式碼- SolrQuery q = new SolrQuery();
- q.setQuery("TITLE:中國人");
1、最基本的欄位查詢:
Java程式碼- TITLE:中國人
即查詢 欄位是TITLE 值包含“中國人”的所有結果集。
solr在查詢時,會對傳入的值分詞, 中國人有可能會被分成“中國”,“國人”,“中國人”。
包含著三個短語的語句都會被搜到。強制要求solr不分詞,可以給短語加上雙引號
Java程式碼- TITLE:"中國人"
這樣就只返回值包含“中國人”這個詞語的。中國和 國人就不會返回。
2、多欄位或關係 OR
Java程式碼- TITLE:("中國人" AND "美國人" AND "英國人")
3.多欄位不包含的關係 NOT
這個語法就是我吃苦的地方,之前已經當多值or那樣去查,結果不是,要寫成
Java程式碼- TITLE:(* NOT "上網費用高" NOT "寬頻收費不合理" )
4.查詢一個範圍 BETWEEN
Java程式碼- NUM:[-90 TO 360 ] OR CREATED_AT:[" + date1 + " TO " + date2 + "]
適用於數字和日期型別 .
日期轉換上, date 要用
Java程式碼- String date1 = FastDateFormat.getInstance(
- "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(
- c.getStartTime().getTime())
來轉換,而不是慣用的 yyyy-MM-dd HH:mm:ss
配置好solr後,可以通過web管理介面進行管理和查詢。web介面基本列出了大多數查詢引數,可以通過這個學習lucene的查詢語法。
solr的查詢解析是通過queryParser來配置的(solrconfig.xml),一般我們用預設的即可。其各引數含義與用法簡單解釋如下:
q:查詢輸入,必須。可以使用運算子
fq:過濾查詢。可以使用運算子
sort:排序的欄位,格式為field score,多個欄位之間用逗號隔開,比如sum(x_f, y_f) desc, price asc,預設是score desc
start:從哪一行開始
rows:獲取多少行
fl:查詢要輸出的欄位,欄位之間用逗號隔開,比如title,price,seller,星號代表所有,預設就是星號。
df:定義查詢時預設的查詢field。
wt:返回的資料型別,可以是JSON、XML、python、ruby、php、csv等格式。
indent:true/false,返回的XML格式是否需要縮排(格式化展示),預設為false
debugQuery:除錯查詢,會輸出查詢過程的一些引數。
高亮相關:
高亮是通過searchComponent來配置的,在solrconfig.xml中配置名為highlight的searchComponent即可,預設的實現是solr.HighlightComponent。
hl:true/false,是否高亮顯示
hl.fl:高亮顯示的欄位
hl.example.pre:高亮顯示的字首
hl.exapmle.post:高亮顯示的字尾
hl.requireFieldMatch:是否只在查詢指定的field(只有當hl.usePhraseHighlighter為true時才生效)高亮顯示,預設是在所有field都高亮
hl.usePhraseHighlighter:true/false,使用SpanScorer高亮查詢短語
hl.highlightMultiTerm:true/false,如果SpanScorer被啟用,這個引數針對字首/模糊/範圍/萬用字元等開啟高亮顯示
facet:true/false
facet是solr的高階搜尋功能之一,可以給使用者提供更友好的搜尋體驗(類似於麵包屑導航的功能)。在搜尋關鍵字的同時,能夠按照 facet指定的欄位進行分組統計。比如商品的分類、商品的規格等。facet的欄位必須被索引,無須分詞(分詞意義不大),也無須儲存。詳細可參考《Solr的facet查詢》
facet的查詢結果返回欄位為facet_counts,與responseHeader、response同級。
facet.query:類似於filter的語法,對任意欄位進行篩選
facet.field:需要進行facet的欄位
facet.prefix:對facet欄位的字首過濾
facet.sort:true/false,對facet以哪種順序返回,true為按照count值從大到小排序,預設為true
spellcheck:拼寫檢查
spellcheck是通過component的方式實現的,你可以在solrconfig.xml檔案中配置searchComponent來完成拼寫檢查的功能,預設的實現是solr.SpellCheckComponent,具體的配置引數和實現原理可以看這裡《spellCheckComponent》
spatial:空間搜尋
spatial是專門針對空間資料進行搜尋的,空間位置的索引和儲存fieldType是LatLonType或者SpatialRecursivePrefixTreeFieldType,通過使用空間搜尋,你可以對點、面等資料建立索引,以圓形、方形或其他形狀進行範圍搜尋,以及對搜尋結果按距離排序等等,具體的配置引數和實現原理可以看這裡《SpatialSearch》
檢索運算子:
冒號":": field:value結構查詢,表示欄位field值為value的查詢。
萬用字元:?(任意一個字元) *(任意字元)
布林操作:AND(並且,同&&) OR(或者,同||) +(包含) -(不包含) NOT(同!),注意AND、OR、NOT均為大寫
範圍:[A TO B](從A到B之間,包含A和B,注意TO大寫),{A TO B}(從A到B之間,不包含A和B,注意TO大寫)
子運算:()括號跟數學表示式上的差不多,比如:(瓜 OR 傻) AND 男人
模糊檢索:~表示模糊檢索,比如:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄
控制相關度:^表示相關度,如檢索jakarta apache,同時希望讓”jakarta”的相關度更加好,那麼在其後加上”^”符號和增量值,即jakarta^4
apache
轉自http://leonayx123.iteye.com/blog/1856127
相關推薦
solr 查詢語法解析
solr的查詢語法是solr應用中查詢的基礎,下文將介紹一下solr查詢中的基礎語法。 內建查詢函式 如果你想自定義搜尋結果打分機制的話,你可以組合solr內建的函式。一般情況下,你可以設定defType=edismax;bf=[自定義函式] 來設定打分機制進行排序。
Solr查詢語法總結-引數說明
1、常用查詢引數說明 q - 查詢字串,必須的。 fl - 指定返回那些欄位內容,用逗號或空格分隔多個。 start - 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。 rows - 指定返回結果最多有多少條
solr查詢語法
還以為網上的solr最基礎的東西應該很多,結果發現je這邊都是一些部署的資料。到沒用人給最基本的查詢語法。在做查詢時十分吃力,自己整理了幾個例子來分享下,希望別人不要再走彎路。 首先說下,查詢都是基於solrj。如果不清楚solrj。可以當做是對solr查詢語句的一個
solr查詢語法詳解
原文部落格:http://www.cnblogs.com/zhangweizhong/p/5056884.html 一.基本查詢 q 查詢的關鍵字,此引數最為重要,例如,q=id:1,預設為q=*:*, fl 指定返回哪些欄位,用逗號
solr客戶端查詢語法
1、常用查詢引數說明 q - 查詢字串,必須的。 fl - 指定返回那些欄位內容,用逗號或空格分隔多個。 start - 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。 rows - 指定返回結果最多有多少條記錄,配合start來實現分頁。
Solr空間查詢語法(ajax呼叫)
1,圓查詢{ q:*:*, fq:{!geofilt}, spatial:true, pt:lng lat,//圓心 sfield:L,//建立索引的欄位 d:3,//半徑設定 }2,矩形查詢{ q:*:*, fq:L:[lat,lng TO lat,lng] //兩個點確定
smart_search 查詢語法
row sta earch text ati 時間 ubd smart date http://localhost:8080/search/6_file/elevate?q=_text_:"時段"&wt=xml&rows=5&start=0&
solr 查詢的相關配置
限制 內容 數據 範圍查詢 傳參 sort [] 我們 參數 由於是第一次接觸solr,故把相關的查詢功能及用法記錄下,方便以後查閱。 q:對於一次查詢請求,如果只傳參數q並指定查詢內容*:*,這樣會返回所有數據,相當於select * from table。指定字段名查詢
Elasticsearch教程 Elasticsearch查詢語法 Elasticsearch權威指南 深入理解Elasticsearch
廣度 int ldd 流量 讀寫性能 word har 優先 廣度優先 課程大綱 第1節結構化搜索_IT技術論壇案例背景介紹 9分鐘 第2節結構化搜索_在案例中實戰使用term filter來搜索數據 20分鐘 第3節結構化搜索_filter執行原理深度剖析(bitset機
學習筆記SQL提交查詢語法之WHERE子句的應用和規則[圖]
居住 總結 數據庫比較 需要 希望 復習 href 如果 引號 俗話說,活到老,學到老,我就是半路出來學習編程的年輕人了,因為個人對於程序有興趣,因此從一開始就自學,但是難度也非常大,目前在學習數據庫了,對於一些語法和技巧,寫一些學習心得筆記,記錄下來,以後也方便復習。最近
Hive內部函數簡介及查詢語法
backward 系統 group by 內部 desc middle href word 語法 1.Hive內置函數: 在Hive中 系統給我們內置了很多函數 具體參考官方地址 看下官網給我們的介紹: SHOW FUNCTIONS; --查看所有內置函數 DESCRI
ElasticSearch 查詢語法
cse req 英文翻譯 false 搜索結果 學java 同時 學什麽 arc 把英文翻譯成中文,讓我覺得很別扭,term,詞項 1、query string search 搜索全部商品:GET /ecommerce/product/_search took:耗費了幾毫秒
我們自己寫的solr查詢的代碼作為search項目中的dao
app ati batis 瀏覽器模擬 express spring 我們 dao 解決方法 我們自己寫的solr查詢的代碼作為search項目中的dao,但是啟動時會報錯: 其實就是說 searchServiceImpl 中我們 Autowired 的 Search
MongoDB 查詢語法與常用查詢語句總結
MongoDB 常用查詢語句總結 先來一波查詢語句語法的基本解釋: 列子: db.mycol.find({"likes": {$gt:10}, $or: [{"by": "yiibai tutorials"}, {"title": "MongoDB Overview"}]}
Solr查詢空值欄位
摘要: Solr的查詢一般都是查詢滿足某個關鍵詞的文件,偶然一個需求是查詢Solr中某個欄位不為空的資料。 查詢空值資料 字串型別 可以通過下面這種查詢方式找到所有描述description為空的資料。 -description:* OR description:"" 整數型別 可以通過
Es學習第七課, term、terms、match等基本查詢語法
term、terms查詢 term query會去倒排索引中尋找確切的term,它並不知道分詞器的存在,這種查詢適合keyword、numeric、date等明確值的 term:查詢某個欄位裡含有某個關鍵詞的文件 GET /customer/doc/_search/ {
JPQL一些簡單的查詢語法
JPQL --> JPA Query Language --> JPA的查詢語句 (另外HQL:Hibernate的查詢語句) JPQL本質:JPA通過antlr-2.7.7.jar將JPQL編譯成sql並且封裝執行的。 JPQL和S
JPA原生SQL查詢語法
①返回物件陣列 resultList.forEach(e -> System.out.println(Arrays.asList(e))); String sql = "SELECT * FROM user"; //user為表名 Query query = entityManager
elasticsearch基本概念與查詢語法
序言 後面有大量類似於mysql的sum, group by查詢elk=== elk總體架構 https://www.elastic.co/cn/products Beat 基於go語言寫的輕量型資料採集器,讀取資料,迅速傳送到Logstash進行解析,亦
Grafana教程(prometheus 基本查詢語法)
prometheus原理可以參考:https://blog.csdn.net/luanpeng825485697/article/details/82318204 k8s上的部署可以參考: https://blog.csdn.net/luanpeng825485697/article/d