一、所使用版本的介紹使用的是elasticsearch2.1.0版本,,在此只是簡單介紹搜索部分的api使用 二,、簡單的搜索使用api的時候,基本上可以將DSL搜索的所有情況均寫出來,,在此給出一個最簡單搜索的全部的過程以及代碼,,之后將對不同的搜索只是針對函數(shù)進行介紹 (1)DSL搜索對于最簡單的DSL搜索,對一個詞進行搜索使用url直接進行通信,,例如,,如果對于一個字段,搜索具體的一個term或者query,,DSL如下所示: {“query”:{"term":{"title":"molong1208 blog"}}} 這個搜索的含義是:在title字段,,搜索內容為molong1208 blog;上面是DSL的寫法,,實際上對于簡單的查詢,,也可以直接使用url查詢,不帶json格式,,假設我們所使用的服務器ip是localhost,,對于如上的查詢可以寫為: localhost:9200/index/type/_search? q=title:molong1208 blog 這個寫法與上邊的DSL語言是同樣的功能的,但是這種寫法只是一些簡單的查詢才可以用,,例如顯示想要的字段,,按照某一字段排序等 localhost:9200/index/type/_search? q=title:molong1208 blog&fields=name,title&sort=id:desc&pretty=true 上述url的意思就是在index/type里面的title字段搜索內容,并且顯示的字段為name以及title,,按照id降序排序,,輸出的格式為美化的json格式 (2)使用java api 實現(xiàn)簡單搜索1、建立連接java api使用搜索的時候,,必須先進行連接,,在直接url的時候是端口9200,但是在使用程序的時候為9300,,如下所示,,建立客戶端的連接,,在connection類里面給出初始化函數(shù) 在此使用的是TransportClient連接,還有一個Nodeclient,,沒使用過,,在此不做介紹2、進行查詢查詢的時候,,需要建立一個SearchRequestBuilder,,這里面將給出對于哪一個index或者type進行查詢,并且所有的設置都可以在這里面進行實現(xiàn),,例如模糊查詢,,范圍查詢,前綴查詢等 上述代碼的意思是對于index的type進行查詢,,其中client即使得到的建立鏈接,,下一步就是要將查詢詞給進去上述代碼就是講所要查詢的詞塞進去,其中setfrom,setsize是指一頁顯示的多少,,從第幾個開始,,顯示size個數(shù)據(jù) 3、展示
其中還可以使用hits.getHits()[i].getSource(),,這是一個map的格式,,可以將具體要展示的進行展示出來 三,、搜索時其他api的實現(xiàn)讀DSL的時候我們可以看到,,查詢有很多的查詢,比如說多域,,比如說過濾等查詢條件,,下面就針對Elasticsearch服務器開發(fā)中一些基本查詢的DSL給出在java api實現(xiàn)的一些形式,其中很多形式不同的之處只是上述塞查詢詞時候的setQuery里面的不同,,所以在此只是講述里面的函數(shù)不同 (1)基本查詢所使用的是matchPhraseQuery(field,text)函數(shù),,這個函數(shù)的參數(shù)有兩個,其中對應text的部分是要解析的,例如,,molong1208 blog 可能經過解析之后會解析成molong1208 以及blog然后再進行查詢的 (2)多詞條查詢對于三個詞molong1208,,blog,csdn在title字段進行查詢,,如果有三者中的任意一個即算匹配(3)match_all查詢
(4)常用詞查詢可以在后面設置具體的cutoffFrequency(5)match查詢只使用過matchPhraseQuery函數(shù),,具體用法見上述所示 (6)multi_match查詢multiMatchQuery(text,fields)其中的fields是字段的名字,可以寫好幾個,,每一個中間用逗號分隔(7)query_string查詢沒使用過這個查詢,,所以對此查詢不是很熟悉,所對應的是Elasticsearch服務器開發(fā)的3.3.7,,具體使用的時候可以再深究如何使用(8)simple_query_string查詢同上所示,,3.3.8(9)標識符查詢個人理解應該是類似如下的查詢,,具體請各位用的時候再次去研究具體哪一個 (10)前綴查詢前一個參數(shù)為使用的field后一個參數(shù)為所使用的前綴詞(11)fuzzy_like_this,fuzzy_like_this_field,,fuzzy查詢在所使用的版本,,沒發(fā)現(xiàn)如何使用fuzzy_like_this以及fuzzy_like_this_field的函數(shù),不清楚是否有這個功能,,只發(fā)現(xiàn)有fuzzy查詢,,后面可以設置boost等值(12)通配符查詢(13)more_like_this,more_like_this_field有兩個方法,,其中第二個是在_all范圍內進行查詢,,第一個后面還有很多可以設置,有需要用的可以具體參考(14)rang查詢對于某一個field,,大于多少,,小于多少(15)dismax查詢
(16)正則表達式查詢
四、bool查詢上述只是大概給出了具體的查詢方式,,有些時候可能我們所想要的為比較復雜的查詢,,例如想要查一個在某個字段必須有某個值,并且另一個字段必須有另外一個值的情況,,這種時候就可以使用bool查詢,,例如下所示
上述的意思是,在title或者title_1或者name字段有query,,并且在title2或者title3字段有query2的結果召回來 當然,,可以根據(jù)自己的情況,有should,,must_not等選擇 五,、過濾器在使用過濾的時候,版本2.1.0僅僅有postfilter,,例如 表示的就是exists過濾,,對有title字段的過濾,個人是這么理解的,,可能有誤
這個的意義與上面的完全不同,,可以參考Elasticsearch服務器開發(fā)具體章節(jié)的介紹 且postfilter為對結果級進行過濾即搜索出來的結果,對結果進行過濾的,,可以理解為后置的過濾器,,es大部分都是先過濾后聚合,這個可以設置為先聚合后過濾 六,、免責聲明以上部分均為個人所理解所寫,,剛接觸,可能有很多是錯誤的,,望各位指正,,勿噴,,希望大家共同進步 |
|
來自: 昵稱23016082 > 《elasticserarh》