1. 程式人生 > >solr查詢語法

solr查詢語法

還以為網上的solr最基礎的東西應該很多,結果發現je這邊都是一些部署的資料。到沒用人給最基本的查詢語法。在做查詢時十分吃力,自己整理了幾個例子來分享下,希望別人不要再走彎路。

首先說下,查詢都是基於solrj。如果不清楚solrj。可以當做是對solr查詢語句的一個api封裝。

solr的查詢其實都是向select這個servlet穿字元型的引數,例如:

Solr程式碼  收藏程式碼
  1. http://192.168.1.107:8983/solr/collection1/select?q=*%3A*&wt=xml&indent=true  

 查詢的欄位格式一般是:   欄位名: 欄位值

說明號會被urlcoding,變成“%3A。”

我沒有看過solrj的原始碼。但是應該是將對select這個servlet的請求通過httpclient的方式的一種實現。

進入正題:

首先需要例項化 SolrQuery 物件,用來做要查詢的引數集合。

Java程式碼  收藏程式碼
  1. SolrQuery q = new SolrQuery();  
  2. q.setQuery("TITLE:中國人");  

1、最基本的欄位查詢:

Java程式碼  收藏程式碼
  1. TITLE:中國人  

 即查詢 欄位是TITLE 值包含“中國人”的所有結果集。

solr在查詢時,會對傳入的值分詞, 中國人有可能會被分成“中國”,“國人”,“中國人”。

包含著三個短語的語句都會被搜到。強制要求solr不分詞,可以給短語加上雙引號

Java程式碼  收藏程式碼
  1. TITLE:"中國人"  

 這樣就只返回值包含“中國人”這個詞語的。中國和 國人就不會返回。

2、多欄位或關係 OR

Java程式碼  收藏程式碼
  1. TITLE:("中國人" AND "美國人" AND "英國人")  

3.多欄位不包含的關係 NOT

這個語法就是我吃苦的地方,之前已經當多值or那樣去查,結果不是,要寫成

Java程式碼  收藏程式碼
  1. TITLE:(* NOT "上網費用高" NOT "寬頻收費不合理" )  

4.查詢一個範圍 BETWEEN

Java程式碼  收藏程式碼
  1. NUM:[-90 TO 360 ]  OR CREATED_AT:[" + date1 + " TO " + date2 + "]  

 適用於數字和日期型別 .

日期轉換上, date 要用 

Java程式碼  收藏程式碼
  1. String date1 = FastDateFormat.getInstance(  
  2.                     "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(  
  3.                     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、pythonruby、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