❶ elasticsearch query 和 filter 的區別
如下例子,查找性別是女,所在的州是PA,過濾條件是年齡是39歲,balance大於等於10000的文檔:版
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": "F"
}
},
{
"match": {
"state": "PA"
}
}
],
"filter": [
{
"term": {
"age": "39"
}
},
{
"range": {
"balance": {
"gte": "10000"
}
}
}
]
}
}
}
返回結果:
查詢雖然包含這權兩種,但是查詢在不同的執行環境下,操作還是不一樣的。
Query與Filter
查詢在Query查詢上下文和Filter過濾器上下文中,執行的操作是不一樣的:
Query查詢上下文:
在查詢上下文中,查詢會回答這個問題——「這個文檔匹不匹配這個查詢,它的相關度高么?」
如何驗證匹配很好理解,如何計算相關度呢?之前說過,ES中索引的數據都會存儲一個_score分值,分值越高就代表越匹配。另外關於某個搜索的分值計算還是很復雜的,因此也需要一定的時間。
❷ elasticsearch中輸入帶空格的關鍵字,實現模糊查詢
"source.strain": {
"type": "muti_field",
"fields": {
"name": {
"type": "string",
"index": "analyzed"
},
"untouched": {
"type": "string",
"index": "not_analyzed"
}
}
}
利用"muti_field"類型可以對同一個欄位實現模糊查詢和精確查詢。
source.strain.name欄位可以用來進行模糊查詢。
source.strain.untouched欄位可以用來進行精確查詢,由於沒有對欄位進行解析,所以還可以對欄位進行分類統計的工作,即elasticsearch中的facet功能。
❸ elasticsearch查詢實現類似if語句
在es1.x版本寫法如下:
{
"query" : {
"filtered" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}
在es2.x或以上版本版寫法如下權:
{
"query" : {
"bool" : {
"filter" : {
"terms" : {
"id" : [1, 2, 3]
}
}
}
}
}
❹ elasticsearch怎麼模糊查詢某個欄位
"source.strain": { "type": "muti_field", "fields": { "name": { "type": "string", "index": "analyzed" }, "untouched": { "type": "string", "index": "not_analyzed" } } }利用"muti_field"類型可以對同一個欄位實現模糊查詢和精確查詢。source.strain.name欄位可以用來進行模糊查詢。source.strain.untouched欄位可以用來進行精確查詢,由於沒有對欄位進行解析,所以還可以對欄位進行分類統計的工作,即elasticsearch中的facet功能。
❺ ElasticSearch怎麼做查詢某個欄位大於某個值的查詢
使用來 _source 過濾。
http://localhost:9200/_search?_source=name
這樣便過自濾除了 name 欄位。
如果使用 Request Body 的話
GET /_search
{
"_source": "name",
"query" : {
//...
}
}
設置為false將會不返回任何 field
GET /_search
{
"_source": false,
"query" : {
"term" : { "user" : "kimchy" }
}
❻ 如何使用elasticsearch 批量查詢資料庫
scroll查詢用於有效的從Elasticsearch中檢索大量文檔,而無需支付深度分頁帶來的開銷。Scrolling允許我們初版始化權搜索將結果從Elasticsearch中按批次分離出來直到沒有更完善啦!
❼ Elasticsearch 查詢怎麼返回指定的欄位值
使用 _source 過濾。
http://localhost:9200/_search?_source=name
這樣便過濾除了 name 欄位。
如果使用 Request Body 的話
GET/_search
{
"_source":"name",
"query":{
//...
}
}
設置為false將會不返回任何 field
GET/_search
{
"_source":false,
"query":{
"term":{"user":"kimchy"}
}
_source 還可以支持一些匹配規則,下面的例子來自官方文檔:
GET/_search
{
"_source":"obj.*",
"query":{
"term":{"user":"kimchy"}
}
}
GET/_search
{
"_source":["obj1.*","obj2.*"],
"query":{
"term":{"user":"kimchy"}
}
}
GET/_search
{
"_source":{
"includes":["obj1.*","obj2.*"],
"excludes":["*.description"]
},
"query":{
"term":{"user":"kimchy"}
}
}
文檔地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-source-filtering.html
❽ elasticsearch 怎麼過濾分詞一個字
分詞一個字
❾ elasticsearch 查看每個分片下有多少條數據
Elasticsearch是一個高伸縮、高可用、基於Apache Lucene的開源搜索與分析引擎。通過它你可以很方便地對數據進行深入挖掘,可以隨時放大與縮小搜索與分析的區間,並且這一切都是實時的。為了提供了一個優秀的用戶體驗,我們對Elasticsearch投入了很大的精力。Elasticsearch本身的各種選項已有了良好的默認值,使用戶能夠更方便地上手。但我們也為用戶提供了全方面的選項,在必要的情況下,可以對該引擎的幾乎每個方面進行定製。
舉例來說,當你使用它搜索數據的時候,可以使用傳統的查詢(『查找滿足條件Y的所有項X』)進行過濾(在Elasticsearch術語中稱為「視圖」),高亮顯示搜索片段,為每條結果提供相應的上下文。也可以使用地理位置(『查找在Z里之內的所有項』),或是為用戶提供搜索關鍵字建議,並且提供了強大的聚合(即Elasticsearch中的「分面」(facet))能力,例如時間分布圖或者統計圖。
Elasticsearch既可以搜索、也可以保存數據。它提供了一種半結構化、不依賴schema並且基於JSON的模型,你可以直接傳入原始的JSON文檔,Elasticsearch會自動地檢測出你的數據類型,並對文檔進行索引。你也可以對schema映射進行定製,以實現你的目的,例如對單獨的欄位或文檔進行boost映射,或者是定製全文搜索的分析方式等等。
你既可以在自己的膝上電腦中啟用一個小型實例,也可以在雲端啟用幾十乃至幾百個實例,只需要一些極小的改變而已。Elasticsearch會自動進行橫向擴展,它能夠隨著你的應用一起成長。
Elasticsearch運行在JVM之上,它使用JSON格式,通過RESTful HTTP介面的方式訪問,因此任何一種客戶端或語言都能夠與其交互。目前已經有了大量的客戶端和框架的整合方案,包括對多種編程語言的支持,通過這些原生的API與專門的DSL將不一致的地方最小化,並實現性能最大化。
Elasticsearch非常適合於大數據的場合,它的高伸縮性與分布式架構的本質使得對大量信息的搜索與存儲都可以在近乎實時的情況下完成。通過Elasticsearch-Hadoop這個項目,我們使Hadoop使用者(這里也包括Hive、Pig和Cascading)能夠用一個成熟的搜索引擎來增強他們的工作流。我們還為他們提供了一種豐富的語言,能夠讓他們更好地表達意圖,因而更准確地獲得想要的結果,並且速度也大大提高了。
❿ ElasticSearch中Filter和Query的異同
如下例子,查找性別是女,所在的州是PA,過濾條件是年齡是39歲,balance大於等於10000的文檔:
{
"query":
{
"bool":
{
"must":
[
{
"match":
{
"gender":
"F"
}
},
{
"match":
{
"state":
"PA"
}
}
],
"filter":
[
{
"term":
{
"age":
"39"
}
},
{
"range":
{
"balance":
{
"gte":
"10000"
}
}
}
]
}
}
}
返回結果:
查詢雖然包含這兩種,但是查詢在不同的執行環境下,操作還是不一樣的。
Query與Filter
查詢在Query查詢上下文和Filter過濾器上下文中,執行的操作是不一樣的:
Query查詢上下文:
在查詢上下文中,查詢會回答這個問題——「這個文檔匹不匹配這個查詢,它的相關度高么?」
如何驗證匹配很好理解,如何計算相關度呢?之前說過,ES中索引的數據都會存儲一個_score分值,分值越高就代表越匹配。另外關於某個搜索的分值計算還是很復雜的,因此也需要一定的時間。
查詢上下文
是在
使用query進行查詢時的執行環境,比如使用search的時候。
Filter過濾器上下文:
在過濾器上下文中,查詢會回答這個問題——「這個文檔匹不匹配?」
答案很簡單,是或者不是。它不會去計算任何分值,也不會關心返回的排序問題,因此效率會高一點。
過濾上下文
是在使用filter參數時候的執行環境,比如在bool查詢中使用Must_not或者filter。
另外,經常使用過濾器,ES會自動的緩存過濾器的內容,這對於查詢來說,會提高很多性能。
總結
1
查詢上下文中,查詢操作不僅僅會進行查詢,還會計算分值,用於確定相關度;在過濾器上下文中,查詢操作僅判斷是否滿足查詢條件
2
過濾器上下文中,查詢的結果可以被緩存。