ElasticSearch 學習-筆記

Lucene 工做原理數據庫

  • 處理文本的最高效作法就是:正則匹配。

ElasticSearch 中的基本概念json

  • 索引: 含有相同屬性的文檔集合。
  • 類型:索引能夠定義一個或多個類型,文檔必須屬於一個類型。
  • 文檔:文檔是能夠被索引的基本數據單元。
  • 分片:每一個索引都有多個分片,每一個分片是一個Lucene 索引。
  • 備份:拷貝一份分片就完成了分片的備份。

ElasticSearch API 命名風格app

  • API 基本格式: http://<ip>:<port>/<索引>/<類型>/<文檔ID>
  • 經常使用的HTTP 動詞:GET/PUT/POST/DELETE

關係型數據庫和ElasticSearch 操做姿式對比less

ElasticSearch 基本操做3d

  • 建立索引
    • 方式一:建立非結構化的索引(以下圖所示)。
    • 方式二:建立結構化的索引,輸入book/novel/_mappings(以下圖所示),
    • 方式三:能夠在Postman 中選擇PUT 方法,輸入localhost:9200/people,而後在raw 中編輯一下json 信息(以下圖):
    • 輸入的json 內容以下:
      • {
                    "settings":{
                    "number_of_shards":3,
                            "number_of_replicas":1
                },
                    "mappings":{
                    "man":{
                        "properties":{
                            "name":{ "type":"text" },
                            "conutry":{ "type":"keyword" },
                            "age":{ "type":"integer" },
                            "date":{
                                "type":"date",
                                        "format":"yyyy-MM-dd HH:mm:ss ||yyyy-MM-dd||epoch_millis"
                            }
                        }
                    },
                    "woman":{}
                }
            }

         

  • 插入數據
    • 方式一:指定文檔ID 插入,在Postman 中使用PUT 方法,輸入localhost:9200/people/man/1,在raw 區域輸入:
      • {
                "name":"Tom",
                    "country":"China",
                    "age":18,
                    "date":"2000-10-11"
            }

         

      • 執行結果:
    • 方式二:自動生成文檔ID 插入,在Postman 中使用POST 方法,輸入localhost:9200/people/man,在raw 區域輸入:
      • {
                "name":"Tom老師",
                    "country":"China",
                    "age":88,
                    "date":"2000-10-11"
            }
      • 執行結果以下:
  • 修改文檔
    • 方式一:直接修改文檔,打開Postmain,選擇POST 方法,輸入localhost:9200/people/man/1/_update,運行結果以下:
    • 方式二:經過腳本修改文檔,在raw 區輸入如下內容:
      • 全部年齡增長一歲。
        • {
                  "script":{
                  "lang":"painless",
                          "inline":"ctx._source.age += 1",
                  }
              }

           

      • 或者輸入:修改年齡爲30 歲。
        • {
                      "script":{
                      "lang":"painless",
                              "inline":"ctx._source.age = params.age",
                              "params":{
                          "age":30
                      }
                  }
              }

           

  • 刪除文檔
    • 刪除文檔:打開Postman,選擇DELETE 方法,輸入localhost:9200/people/man/1,執行結果以下:
    • 刪除索引,打開Postman 輸入localhost:9200/people,執行結果以下:
  • 查詢語法
    • 全表查詢:在Postman 中選擇GET 方法,輸入localhost:9200/book/_search 獲得如下結果:
    • 條件查詢:在Postman 中選擇GET 方法,輸入localhost:9200/book/_search,而後在raw 區域中編輯以下內容:
      • 查詢書籍中包含老師關鍵字,且按年齡降序排序。
      • {
                "query":{
                "match":{
                    "name":"老師"
                }
            },
                "sort":[
                   {"age":{"order":"desc"}}
                 ]
            }

         

    • 聚合查詢:在Postman 中選擇GET 方法,輸入localhost:9200/book/_search,而後在raw 區域中編輯以下內容:
      • 根據國家和名稱進行分組
    • 聚合統計:在Postman 中選擇GET 方法,輸入localhost:9200/book/_search,而後在raw 區域中編輯以下內容:
      • 根據年齡的字數進行聚合統計。
        • {
          	"aggs":{
          		"grades_age":{
          			"stats":{ "field":"age" }
          		}
          	}
          }

解決聚合分組沒效果::code

  • people是index、man是類型、country是你須要設置的text字段    

ElasticSearch 高級查詢orm

  • query 條件:
    • 方式一:模糊匹配,在Postman 中選擇GET 方法,輸入localhost:9200/people/_search,而後在raw 區域中編輯以下內容:
      • 注意這裏的匹配,你隨便輸,他本身會切詞
        • {
                  "query":{
                      "match":{
                          "name":"Tom小"
                      }
                  }
              }
    • 方式二:習語匹配查詢name中包含」小小」
      • {
                "query":{
                    "match_phrase":{
                        "name":"小小"
                    }
                }
            }

         

    • 方式三:多字段匹配查詢name和country中都包含」Tom」
      • {
                "query":{
                    "multi_match":{
                        "query":"Tom",
                                "fields":["name","country"]
                    }
                }
            }
    • 方式三:Query 語法查詢查詢name和country中同時包含XXX和YYY,或者包含ZZZ。
      • {
                "query":{
                    "query_string":{
                        "query":"(小 AND USA) OR china",
                                "fields":["name","country"]
                    }
                }
            }
    • 方式四:結構化數據查詢
      • 查詢字數在87到90之間的數據
        • {
                  "query":{
                      "range":{
                          "age":{
                              "gt":87,
                                      "lte":90
                          }
                      }
                  }
              }
    • 查詢2000-10-12 至今 的數據
      • {
                "query":{
                    "range":{
                        "date":{
                            "gt":"2000-10-12",
                            "lte":"now"
                        }
                    }
                }
            }
    • filter 條件:
      • {
                "query":{
                    "bool":{
                        "filter":{
                            "term":{
                                "age":98
                            }
                        }
                    }
                }
            }
    • 複合查詢
      • {
                "query":{
                    "bool":{
                        "must":[
                            {
                                "match":{
                                "name":"老師"
                                }
                            },
                            {
                                "match":{
                                "country":"China"
                                }
                            }
                        ],
                        "filter":{
                            "term":{
                                "age":88
                            }
                        }
                    }
                }
            }
相關文章
相關標籤/搜索