1. 程式人生 > 實用技巧 >ElasticSearch 基礎入門 and 操作索引 and 操作文件

ElasticSearch 基礎入門 and 操作索引 and 操作文件

基本概念

索引:
    類似於MySQL的表。索引的結構為全文搜尋作準備,不儲存原始的資料。
    索引可以做分散式。每一個索引有一個或者多個分片 shard。每一個分片可以有多個副本 replica。
文件:
    類似與MySQL的一行記錄。
對映:
    所有文件寫入索引之前,會進行分析, 分析將輸入的文字進行分割為詞條,分析哪些詞條會被過濾。
文件型別:
    每個文件都可以有不同的結構。
    不同的文件類不能為相同的屬性設定不同的型別。
    【同一索引中所有文件型別中,一個title欄位必須是相同的型別】

RestFul API 操作索引

1 建立索引

PUT:127.0.0.1:9200/test

{
    "settings": {
        "index": {
            "number_of_shards": "2",
            "number_of_replicas": "0"
        }
    }
}

2 刪除索引

DELETE:127.0.0.1:9200/test

RestFul API 操作文件

1、新增資料

POST:/{索引}/{型別}/{id 非必需}

# 指定資料的唯一標示符
POST:127.0.0.1:9200/test/user/1001

{
    "id": 1010,
    "name": "張三",
    "age": 10,
    "sex": "男"
}

# 不指定資料的唯一標示符
POST:127.0.0.1:9200/test/user

{
    "id": 1011,
    "name": "張三",
    "age": 11,
    "sex": "男"
}

2、刪除資料

DELETE:127.0.0.1:9200/test/user/1001
說明:
刪除一個文件的時候不會立即從磁碟上移除,它只是被標記為已刪除。
Elasticsearch 將會在以後新增更多索引的時候才會在後臺進行刪除內容的清理。

3、更新資料

在 Elasticsearch中,文件資料是不能被修改的,但是可以通過指定唯一標示符的方式進行覆蓋更新【全量覆蓋】
PUT:127.0.0.1:9200/test/user/1001

{
  "id": 1010,
  "name": "張三",
  "age": 11,
  "sex": "男"
}

【區域性更新】
1、從舊文件中檢索到JSON
2、修改
3、刪除舊文件
4、索引新文件
POST:127.0.0.1:9200/test/user/1001/_update

{
    "doc":{
        "age": 100
    } 
}

4、查詢資料

 根據ID搜尋資料【GET】127.0.0.1:9200/test/user/1001
 獲取所有資料預設10條【GET】127.0.0.1:9200/test/user/_search
 根據關鍵詞搜尋資料【GET】127.0.0.1:9200/test/user/_search?q=age:100

5、DSL搜尋

Elasticsearch提供的豐富的靈活的查詢語言叫做DSL查詢【Query DSL】
POST:127.0.0.1:9200/test/user/_search

{
    "query": {
        "match": { 
            "age": 20
        }
    }
}

filter 過濾
must 匹配 

6、全文檢索

POST:127.0.0.1:9200/test/user/_search

{
    "query": {
        "match": { 
            "name": "三 五"
        }
    }
}

7、高亮顯示

POST:127.0.0.1:9200/test/user/_search

{
    "query": {
        "match": { 
            "name": "三 五"
        }
    },
    "highlight": {
        "fields": {
            "name": {}
        }
    }
}

8、聚合操作,類似SQL中的 group by 操作

POST:127.0.0.1:9200/test/user/_search

{
    "aggs": {
        "all_interests": {
            "terms": {
                "field": "age"
            }    
        }
    }
}