ElastciSearch簡單總結(筆記)

前言:

  前段時間在項目中使用了es,作為一個當前比較流行的分布式搜索引擎,在學習和使用它的過程中,踩了不少坑,這篇文章先簡單整理了一下,后續會整理一下之前踩過的一些坑。?

1. ElastciSearch是什么

  ElasticSearch是一個基于Apache Lucene的開源搜索引擎。它不僅僅是Lucene和全文搜索,我們還能這樣去描述他:

    • 分布式的實時文件存儲,每個字段都被索引并可被搜索
    • 分布式的實時搜索引擎
    • 可以擴展到上百臺服務器

2. ElasticSearch的安裝與配置

  安裝方法網上很多,http://blog.csdn.net/whxaing2011/article/details/18237733

  配置:elasticsearch.yml

3. 與ElasticSearch的交互

  ElasticSearch提供多種語言的客戶端API,詳見

  ElasticSearcg為.NET用戶提供了三種客戶端,?

  • ElasticSearch.NET

    一個非常底層且靈活的客戶端

  • NEST

    ElasticSearch的官方客戶端,具有非常簡潔的API。可以映射所有請求和響應對象,擁有一個強類型查詢DSL。依賴ElasticSearch.NET客戶端。

  • PlainElastic.Net

    PlainElastic.net是一個Github開源項目。關于它和ElasticSearch.NET/NEST的活躍度對比。

4. 面向文檔

  ElasticSearch是面向文檔的,在ES中可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式和以往關系型數據庫不同,這也是ES能夠執行復雜的全文搜索的原因之一。

5. 對索引的理解

  在ElasticSearch中存儲數據的行為就叫做索引(Index),前面所說的文檔歸屬于不同種類型(Type),而這些類型存在于索引。

  數據庫->表->行->列? 對應es中 索引->類型->文檔->字段

  索引的創建

  語法:

PUT /indextest/people/1
{"name":"張三","age": 25,"sex": "","interests":["體育", "音樂"]
}               

  通過HTTP的GET方法來檢索文檔,同樣的,可以通過DELETE方法來刪除文檔,如果想要更新就在PUT一次。

6. 搜索

?? ?????語法:GET /indextest/people/1

     DELETE /indextest /people/1

??? 簡單搜索

  搜索全部的病人信息?

    語法:GET /elasticsearch1/patient/_search

  這里,我們在結尾使用關鍵字_search來取代原來的文檔ID。返回的結果中hits數組中包含了我們所有的文檔。

???  接下來,讓我們搜索年齡大于35的患者

???????   GET /elasticsearch1/patient/_search?q=Pat_Age:>35

?????? 這種方法叫做查詢字符串(query string)搜索,像傳遞URL參數一樣傳遞語句

??? 使用DSL語句查詢

  查詢字符串搜索有局限性,ES還提供了豐富靈活的查詢語言叫做DSL查詢,它可以構建更加復雜強大的查詢。DSL以JSON請求體的形式出現。

GET /elasticsearch1/patient/_search
{"query" : {"range" : {"Pat_Age" : {"gt": 35}}}
}

  更復雜的查詢

GET /elasticsearch1/patient/_search
{"query" : {"bool": {"must": [{"term": {"Pat_Marital": {"value": "已婚"}}},{"range" : {"Pat_Age" : {"gt": 35}}}]}}
}

? ? ?加過濾器

GET /elasticsearch1/patient/_search
{"query" : {"filtered": {"query": {"bool": {"must": [
                       {"term": {"Pat_Marital": {"value": "已婚"
                              }}},{"range" : {"Pat_Age" : {"gt": 35
                               }}}]}},"filter": {"term": {"Pat_Gender": "男"
               }}}}
}

  ElasticSearch也提供了這種特殊的緩存,filter cache來存儲filters得到的結果集。此外,緩存filters不需要太多的內存(它只保留一種信息,即哪些文檔與filter相匹配),同時它可以由其它的查詢復用,極大地提升了查詢的性能。

  并非所有的filters都會緩存,默認情況下,如下的filters不會被緩存:

Query查詢對象會將所有的條件綁定到一起存儲到緩存中,只要有一個條件改變就不能重用。

? ? 全文搜索

  接下來介紹全文搜索—一種傳統數據庫不好實現的搜索

???  如搜索所有得糖尿病又得高血壓的病人

GET /patientcase/patientcase/_search
{"query" : {"match" : {"Case_HDSD00_11_076" : "高血壓糖尿病"
        }}
}

  如下,用<em></em>來標識匹配到的單詞高亮

GET /patientcase/patientcase/_search
{"query" : {"match" : {"Case_HDSD00_11_076" : "高血壓糖尿病"
        }},"highlight": {"fields" : {"Case_HDSD00_11_076" : {}
        }}
}

? ? query_string

  參數:

???????   這里只挑幾個常用的參數說一下,其他的一般默認就夠了

??? ???   query:需要查詢的具體內容

???????   default_field:查詢的字段

    ?default_operator:默認運算符

GET /patientcase/patientcase/_search
{"query" : {"query_string":{"default_field":"name","query":"張*"
        }}
}

? ? 聚合

  ES可以通過聚合做一些分析統計

GET /elasticsearch1/patient/_search
{"filter": {"has_child": {"type": "adm","query": {"term": {"Adm_AdmDiagnos": {"value": "高血壓"
                  }}}}},"aggs" : {"avg_age" : {"terms" : { "field" : "Pat_Gender" }
        }}
}

  相關資料:

???   Mastering Elasticsearch(中文版)??http://udn.yyuap.com/doc/mastering-elasticsearch/index.html

???   ElasticSearch權威中文版??https://es.xiaoleilu.com/

   ElasticSearch英文API??https://www.elastic.co/guide/en/elasticsearch/client/index.html

???   ES相關插件??http://www.cnblogs.com/huangfox/p/3541300.html

?

轉載于:https://www.cnblogs.com/felix-hpp/p/8939934.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392614.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記一次ArrayList產生的線上OOM問題

前言&#xff1a;本以為(OutOfMemoryError)OOM問題會離我們很遠&#xff0c;但在一次生產上線灰度的過程中就出現了Java.Lang.OutOfMemoryError:Java heap space異常&#xff0c;通過對線上日志的查看&#xff0c;最終定位到ArrayList#addAll方法中&#xff0c;出現這個問題的原…

leetcode 222. 完全二叉樹的節點個數(dfs)

給出一個完全二叉樹&#xff0c;求出該樹的節點個數。說明&#xff1a;完全二叉樹的定義如下&#xff1a;在完全二叉樹中&#xff0c;除了最底層節點可能沒填滿外&#xff0c;其余每層節點數都達到最大值&#xff0c;并且最下面一層的節點都集中在該層最左邊的若干位置。若最底…

css 計算屬性的應用_如何使用一點CSS Grid魔術設計計算器應用

css 計算屬性的應用by Deepika Gunda由Deepika Gunda 如何使用一點CSS Grid魔術設計計算器應用 (How to use a little CSS Grid magic to design a calculator app) This article is a quick intro to CSS Grid. We will be making a calculator using it.本文是CSS Grid的快速…

vc調試大全

一、調試基礎 調試快捷鍵 F5&#xff1a; 開始調試 ShiftF5: 停止調試 F10&#xff1a; 調試到下一句&#xff0c;這里是單步跟蹤 F11&#xff1a; 調試到下一句&#xff0c;跟進函數內部 ShiftF11: 從當前函數中跳出 CtrlF10: 調試到光標所在位置 F9&#xff1a; …

Google-Guava-EventBus源碼解讀

Guava是Google開源的一個Java基礎類庫&#xff0c;它在Google內部被廣泛使用。Guava提供了很多功能模塊比如&#xff1a;集合、并發庫、緩存等&#xff0c;EventBus是其中的一個module&#xff0c;本篇結合EventBus源碼來談談它的設計與實現。 概要 首先&#xff0c;我們先來預…

leetcode 1370. 上升下降字符串

給你一個字符串 s &#xff0c;請你根據下面的算法重新構造字符串&#xff1a; 從 s 中選出 最小 的字符&#xff0c;將它 接在 結果字符串的后面。 從 s 剩余字符中選出 最小 的字符&#xff0c;且該字符比上一個添加的字符大&#xff0c;將它 接在 結果字符串后面。 重復步驟…

mysql 設置事物自動提交_mysql事務自動提交的問題

1&#xff1a;mysql的aut0commit配置默認是開啟的&#xff0c;也就是沒執行一條sql都會提交一次&#xff0c;就算顯示的開啟事務也會導致多條SQL不在一個事務中&#xff0c;如果需要相關的SQL在同一個事務中執行&#xff0c;那么必須將autocommit設置為OFF&#xff0c;再顯式開…

rest laravel_如何通過測試驅動開發來構建Laravel REST API

rest laravelby Kofo Okesola由Kofo Okesola 如何通過測試驅動開發來構建Laravel REST API (How to build a Laravel REST API with Test-Driven Development) There is a famous quote by James Grenning, one of the pioneers in TDD and Agile development methodologies:T…

python之numpy

numpy是一個多維的數組對象&#xff0c;類似python的列表&#xff0c;但是數組對象的每個元素之間由空格隔開。 一、數組的創建 1.通過numpy的array(參數)&#xff0c;參數可以是列表、元組、數組、生成器等 由arr2和arr3看出&#xff0c;對于多維數組來說&#xff0c;如果最里…

git 上傳

轉載于:https://www.cnblogs.com/benbentu/p/6543154.html

Liferay 部署war包時候的deployDirectory 細節分析

引入&#xff1a; 在上文中&#xff0c;我們從宏觀上講解了Liferay部署war包的動作是如何觸發監聽器并且完成部署過程的&#xff0c;但是其中最核心的一塊deployDirectory我們沒講&#xff0c;它的作用是當有了臨時目錄并且已經把war包的內容展開到該目錄之后&#xff0c;是如何…

leetcode 164. 最大間距(桶排序)

給定一個無序的數組&#xff0c;找出數組在排序之后&#xff0c;相鄰元素之間最大的差值。 如果數組元素個數小于 2&#xff0c;則返回 0。 示例 1: 輸入: [3,6,9,1] 輸出: 3 解釋: 排序后的數組是 [1,3,6,9], 其中相鄰元素 (3,6) 和 (6,9) 之間都存在最大差值 3。 示例 2: …

批處理定時mysql備份數據庫_定時備份mysql數據庫的批處理

定時備份mysql數據庫的批處理代碼&#xff0c;保存為backup_mysql.bat&#xff0c;運行即可。復制代碼 代碼如下:echo offset txt1%date:~0,4%::當前年set txt2%date:~5,2%::當前月set txt3%date:~8,2%::當前日set txt4%time:~0,2%::當前小時set txt5%time:~3,2%::當前分鐘set …

算法訓練營 重編碼_您在編碼訓練營期間可能面臨的最大挑戰

算法訓練營 重編碼by Joanna Gaudyn喬安娜高登(Joanna Gaudyn) 您在編碼訓練營期間可能面臨的最大挑戰 (The biggest struggles you might face during a coding bootcamp) You think that during a coding bootcamp nothing can be more challenging than learning programmi…

1449 砝碼稱重(思維)

題目鏈接&#xff1a;https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId259281 題解&#xff1a;這題有一個技巧&#xff0c;畢竟是w^0,w^1,w^2....這樣&#xff0c;必然會想到w進制&#xff0c;而且就只能用一次。 那么就簡單了&#xff0c;把m拆成w進制&#xf…

leetcode 454. 四數相加 II(哈希表)

給定四個包含整數的數組列表 A , B , C , D ,計算有多少個元組 (i, j, k, l) &#xff0c;使得 A[i] B[j] C[k] D[l] 0。 為了使問題簡單化&#xff0c;所有的 A, B, C, D 具有相同的長度 N&#xff0c;且 0 ≤ N ≤ 500 。所有整數的范圍在 -228 到 228 - 1 之間&#xf…

“換標”Intel的窮則思變

成語有云“窮則思變”&#xff0c;用這個詞來形容早先的Intel換標也最恰當不過。當然這里“窮”&#xff0c;不是說Intel很貧窮&#xff0c;而是說Intel在自己的產業到了盡頭。Intel推產品概念的水平是一流的&#xff0c;雖然某些概念事后被認為是錯誤的&#xff08;如&#xf…

mysql開發中遇到的坑_mysql優化過程中遇見的坑(mysql優化問題特別注意)

單條查詢最后添加 LIMIT 1&#xff0c;停止全表掃描。對于char(4) 或者vachar(4)&#xff0c;無論是中文還是英文都是存儲四個字符&#xff0c;注意是字符而不是字節。如果一個字段未int類型&#xff0c;此類型只有0、1兩個狀態&#xff0c;需要為此建立索引嗎&#xff1f;過度…

初級開發人員的缺點_在您作為初級開發人員的第一年獲得此建議

初級開發人員的缺點Are you a junior developer embarking on your software development career?您是從事軟件開發事業的初級開發人員嗎&#xff1f; Or a recent computer science graduate who has recently started a new job?還是最近剛開始從事新工作的計算機科學專業…

Spark日志分析

根據tomcat日志計算url訪問了情況&#xff0c;具體的url如下&#xff0c; 要求&#xff1a;區別統計GET和POST URL訪問量 結果為&#xff1a;訪問方式、URL、訪問量 輸入文件&#xff1a; 196.168.2.1 - - [03/Jul/2014:23:36:38 0800] "GET /course/detail/3.htm HTTP/1.…