1、基本概念及原因html
1.Sql vs nosqlmysql
SQL:Structured Query Languagesql
Nosql:Not only SQL數據庫
Relationship DBjson
Relations:One-to-one relation、One-to-many、Many-to-many、Self-referencewindows
Mongo DB(humongous 大量的)、Redis .ect (內存型數據庫)api
Structure:Database Collencitons Documentsapp
2.爲什麼使用搜索引擎curl
項目中的搜索功能,若是數據量較小,那麼能夠直接使用mysql進行搜索;當數據量到達必定規模後,好比十億、百億,這時傳統的關係型數據庫就已經達到性能瓶頸,不適合這個項目,此時可使用搜索引擎ElasticSearch。可能你會問,爲何不用內存型數據庫。雖然內存型數據庫讀寫性能很高,可是將龐大的數據量全都裝進內存中不太現實。好比,使用PB級別的數據,每一個內存節點96G的話,那麼須要上萬個節點,再考慮到數據的備份,那麼會更多。這麼高的成本,不現實。軟件是服務於企業的,企業的目的是盈利。nosql
3.初步認識ElasticSearch
目前常見的搜索引擎的首選,就是開源的ElasticSearch。它能夠快速存儲、搜索和分析海量數據。它的底層是開源庫Lucene(Lucene必須手動去寫接口進行調用)。Elastic對Lucene進行了封裝,提供了基於Rest API的接口,能夠直接操做接口。
(official document path : https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html)
學習環境:elasticsearch-7.5.2 windows 10
3.1 基本概念
※Node、Cluster※
ElasticSearch的本質是分佈式數據庫,所以就會有節點(Node),一個節點至關於一個實例,一組節點構成集羣(cluster)。
※Index※ES會給全部存儲的數據創建索引,通過處理後會有個反向索引。查找數據時直接查找該索引。
※Document※
插入ES中的每條記錄都是一個Document。它也是使用JSON格式,多個Document構成了一個Index。
※Type※
分組的類型。
e.g. curl -X PUT "localhost:9200/customer/_doc/3?pretty" -H "Content-Type: application/json" -d "{\"name\": \"John Lee3\"}"
customer 是Index的名字。_doc是type名字。3表示該條記錄的ID,它不必定是數字,任意字符串(如:「adc」)均可以。添加數據時,也能夠不指定ID,這時,會自動添加一個隨機字符串的ID。pretty表示易讀的格式返回。
3.2 Get Started
(1)install path https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html
(2)Run bin/elasticsearch (or bin\elasticsearch.bat on Windows)
(3)Run curl http://localhost:9200/
3.3 memo
我照着官網學習時,用到的命令,複製下來備用。下面命令我親自執行過,沒有問題。
curl -X GET "localhost:9200/_cat/health?v&pretty"
curl -X PUT "localhost:9200/customer/_doc/3?pretty" -H "Content-Type: application/json" -d "{\"name\": \"John Lee3\"}"
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl -X GET "localhost:9200/customer/_doc/1?pretty"
curl "localhost:9200/_cat/indices?v"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d "{\"query\": { \"match_all\": {} },\"sort\": [{ \"account_number\": \"asc\" }]}"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d"
{
\"query\": { \"match_all\": {} },
\"sort\": [
{ \"account_number\": \"asc\" }
],
\"from\": 10,
\"size\": 10
}"
curl -X GET "localhost:9200/bank/_search?pretty" -H "Content-Type: application/json" -d"{ \"query\": { \"match\": { \"address\": \"mill lane\" } }}"
4.踩坑
1.使用curl命令時,注意事項。(環境:windows環境,在cmd.exe下執行的curl命令)
必定要注意雙引號以及轉義字符。切記。按照官網複製來的命令,會有問題。
curl -H "Content-Type: application/json" -X POST -d "{\"abc\":123}" "https://httpbin.org/post"
參考文檔:
https://blog.csdn.net/aisemi/article/details/80212836
https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html Elasticsearch official guides
http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html
※