ElasticSearch的接口語法
curl ‐X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' ‐d '<BODY>'
1.創建索引index同時映射mapping
請求地址,創建一個名為myindex1的索引庫
http://192.168.118.3:9200/myindex1
請求的JSON
{ "mappings": { "type1": { "properties": { "id": { "type": "long", "store": true, "index": false }, "title": { "type": "text", "store": true, "index": true, "analyzer":"standard" }, "content": { "type": "text", "store": true, "index": true, "analyzer":"standard" } } } } }
- type:存儲的類型
- store:代表是否保存,取值類型為boolean
- index:代表是否進行進行分析(分詞),我用的是6.2.4版本的es,其他版本可能有差異取值為"not_analyzed"或"analyzed",
- analyzer:代表使用的分析器的類型,之后才用中文分詞的時候修改此處
elasticsearch-head查看(我這里使用的集群,默認分成5片,復制一份)
查看索引信息
2.先創建索引然后在設置Mapping(修改)
這種情況也可以當作修改索引庫
ElasticSearch是基於Lucene開發的,他的修改的原理也是一樣,先刪除在添加
只發送請求,不帶json請求體
http://192.168.118.3:9200/myindex2
設置mapping的請求,換成POST方式請求
http://192.168.118.3:9200/myindex2/type1/_mapping
請求體中的json串
{ "type1": { "properties": { "id": { "type": "long", "store": true, "index": false }, "title": { "type": "text", "store": true, "index": true, "analyzer":"standard" }, "content": { "type": "text", "store": true, "index": true, "analyzer":"standard" } } } }
請求注意要點(下圖)
3.刪除索引
刪除索引比較簡單,把請求方式更改為DELETE
4.創建文檔document
POST請求
http://192.168.118.3:9200/myindex1/type1/1
json文檔內容
{ "id":1, "title":"ElasticSearch是一個基於Lucene的搜索服務器", "content":"它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java 開發的,並作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時 搜索,穩定,可靠,快速,安裝使用方便。" }
響應結果
使用elasticSearch-head查看文檔
使用相同的id再次添加視為修改,會覆蓋之前的文檔
5.刪除文檔
刪除和創建文檔的請求一樣,只不過不需要json串,只是把請求方式由post更改為DELETE
http://192.168.118.3:9200/myindex1/type1/1
6.根據id查詢文檔
根據id查詢文檔請求和添加刪除一樣,把請求方式更改為GET即可
7.使用querystring查詢文檔
POST請求
http://192.168.118.3:9200/myindex1/type1/_search
請求json
{ "query": { "query_string": { "default_field": "title", "query": "搜索服務器" } } }
default_field:要搜索的域
query:搜索條件
響應結果
將查詢關鍵字變為"亞索",還是可以查到,應為包含了"索"字,這是應為底層的分析器的原因
8.使用term查詢
將上次發生的json更改為term方式
{ "query": { "term": { "title": "搜索" } } }
在使用默認的分析器,會把漢字拆分成一個一個的,搜索詞語是查詢不出來結果的
IK分詞器
測試默認的分詞器
發生POST請求
http://192.168.118.3:9200/_analyze
JSON
{ "analyzer":"standard", "text":"中華人民共和國" }
分詞結果
這樣分詞效果對於中文文檔來說,是我們不能接受的,我們需要使用專門針對於漢字詞語進行分詞的分詞器
我們需要配置IK分詞到Elasticsearch中,將ik分詞器的包解壓到plugins目錄下並重新啟動ES就好了
{ "analyzer":"ik_smart", "text":"中華人民共和國" }
分詞結果
再測試一下,ik_max_word最細粒度划分
{ "analyzer":"ik_max_word", "text":"中華人民共和國" }
分詞結果
接下來使用ik分詞器重建索引庫,先將之前的索引庫刪除
{ "type1": { "properties": { "id": { "type": "long", "store": true, "index": false }, "title": { "type": "text", "store": true, "index": true, "analyzer":"ik_max_word" }, "content": { "type": "text", "store": true, "index": true, "analyzer":"ik_max_word" } } } }
然后再添加文檔
之后再次執行之前的查找文檔
再次搜索"亞索"
返回結果為空,
再執行之前的trem查詢
可以看到正常搜索出來了
索引庫