Elastic Search快速上手(3) 搜尋

2021-08-09 05:12:16 字數 3339 閱讀 5102

儲存好資料之後,便可通過restful api進行搜尋。

詳細文件可參考:

--簡單搜尋

--深入搜尋

注:對前文的乙個補充,可以使用analyze來檢視分詞器的分詞結果。

get _analyze

分詞結果:

,

,]}

搜尋使用get方式,get請求的路徑中,可以包含目標索引、型別和文件 id。

/_search

在所有的索引中搜尋所有的型別

/gb/_search

在 gb 索引中搜尋所有的型別

/gb,us/_search

在 gb 和 us 索引中搜尋所有的文件

/g*,u*/_search

在任何以 g 或者 u 開頭的索引中搜尋所有的型別

/gb/user/_search

在 gb 索引中搜尋 user 型別

/gb,us/user,tweet/_search

在 gb 和 us 索引中搜尋 user 和 tweet 型別

/_all/user,tweet/_search

在所有的索引中搜尋 user 和 tweet 型別

形如:(注,有時get不支援帶請求體,因此這裡的get請求也可換成post)

get _search

}}

例如,查詢title欄位中含有python的:

get test/_search

}}

返回結果:

,

"hits":

}#略]

}}

注意

如果在乙個精確字段上面使用match,則會精確匹配,比如在數字或者keyword的字段上使用。如果是text型別,則資料和查詢語句都會經過分詞器的處理。

例如,如果標題中為python,而查詢詞為大寫python,若經過ik分詞,都會被轉換為小寫,因此仍然能查出;但如果此title欄位未經分詞,而是keyword型別的話,則大小寫不匹配,就無法查出。

此外,match中只能指定乙個查詢字段。

區別是term對於查詢詞不會進行分詞,必須精確完全匹配。

get test/_search

}}

get test/_search

}}

最簡單的,查詢所有。

get test/_search

}}

在match查詢中,如果對text欄位指定了像「python教程」這樣的查詢詞,會進行分詞,包含python或教程的結果都會被查詢出來。而match_phrase也會進行分詞,但是只有全部包含這些詞的結果會被查詢出來。

get test/_search

}}}

slop的含義是拆分出來的詞之間的最大間距。若超出此間距,就算都包含這些詞,也不會返回。

match查詢只能指定乙個字段,而multi_match可以指定多個字段。

get test/_search

}}

查詢comments中大於5小於等於60的資料:

get test/_search

}}}

查詢時間大於17-4-1而且小於等於當前:

get test/_search

}}}

(boost是權重,可有可無,別的地方也可以用)

查詢pyt*n:

get test/_search

}}}

可以進行查詢結果的分頁,指定從第幾個開始,取幾個。

get test/_search

},"from":0,

"size":2

}

還是可以通過_source指定返回哪些字段。

get test/_search

}}

對comments欄位按照asc公升序排列(desc為降序):

get test/_search

},"sort":

}}

bool查詢將多查詢組合在一起,它包含以下四種引數:

must

文件 必須 匹配這些條件才能被包含進來。

must_not

文件 必須不 匹配這些條件才能被包含進來。

should

如果滿足這些語句中的任意語句,將增加 _score ,否則,無任何影響。它們主要用於修正每個文件的相關性得分。

filter

必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文件。

在bool中可指定filter進行過濾。

如,使用term精確匹配出salary為20的文件:

get test2/job/

_search}}

}}

如果想過濾多個值,可以用terms。

靈活運用各種組合過濾查詢。例如,下面的查詢,是並且

get test2/job/

_search

}, }

],"must_not":}}

}}

bool可進行巢狀。下面的例子,外層should並列兩個條件或,要麼標題含有python,要麼必須滿足標題精確匹配django而且salary精確匹配30.

get test2/job/

_search

}, },}]

}}]

}}}

用於查詢某個字段是否存在或為null。

下面例子中,前者篩選出存在title欄位的文件,後者則反之。

get test2/job2/

_search}}

}}get test2/job2/

_search}}

}}

經過上面的介紹,基本整理了es的搜尋中的常用方法,能滿足最基礎的搜尋使用。更詳細的搜尋,請參閱文件。

Elasticsearch快速入門

mysql estable index type rowdocument column field schema sqldsl 乙個es集群由乙個或多個節點 node 組成,每個集群都有乙個cluster name作為標識。乙個es例項就是乙個 node,乙個機器可以有多個例項,所以並不能說一台機器...

ElasticSearch快速入門

一.前言 上週公司在做乙個模組功能的時候 因為最後的結果資料量遠遠超過了預想的資料量 最後不得不把mysql換成elastic search,以前在學校的時候也沒有1接觸到這些東西 剛好這段時間處於專案空檔期 所以剛好趁機學習一下 二.介紹 elasticsearch是乙個分布式的restful風格...

Elasticsearch學習之快速入門案例

1.document資料格式 面向文件的搜尋分析引擎 1 應用系統的資料結構都是物件導向的,複雜的 2 物件資料儲存到資料庫中,只能拆解開來,變為扁平的多張表,每次查詢的時候還得還原回物件格式,相當麻煩 3 es是面向文件的,文件中儲存的資料結構,與物件導向的資料結構是一樣的,基於這種文件資料結構,...