ElasticSearch(一)基礎知識

目錄

相關產品

全文索引

Lucene

lucene倒排索引

術語及概念

對外接口

API約定

多索引參數

日期篩選

通用參數

基於URL的訪問控制

REST

HEAD插件

創建庫

JAVA API


Elastic Search 是一個基於Lucene構建的開源、分佈式、RESTful接口全文搜索引擎,也是一個分佈式文檔數據庫

相關產品

  • Beats

一個代理,可以把數據發給ES。

  • Shield

權限控制,基於角色管理。收費項目

  • Watcher

警報和通知工具

  • Marvel

管理和監控工具。收費項目

全文索引

對每個詞建立一個索引,指明該詞在文章中出現的次數和位置。

Lucene

Lucene是一個全文索引引擎工具包,提供了完整的查詢引擎和索引引擎,以及部分的文本分析引擎。

lucene倒排索引

不是由記錄確定屬性值,而是由屬性值確定記錄位置,因此稱爲倒排索引。帶有倒排索引的文件稱爲倒排索引文件(reverted file)。

倒排索引中的對象爲文檔或者文檔中的單詞。用來存儲單詞或者文檔在一個文檔或一組文檔中的位置。

搜索引擎的關鍵是建立倒排索引文件。倒排索引一般表現爲一個關鍵詞,它的頻度,位置。

1、取得關鍵詞:

2、建立倒排索引

3、實現

  • 詞典文件(Term Dictionary)

  • 頻率文件(frequencies)

  • 位置文件(positions)

  • field。信息所在位置,保存在詞典文件中。

4、壓縮算法

5、應用場景

術語及概念

1、索引詞(term)

索引詞是一個能夠被索引的精確值。foo,Foo,FOO,是不同的索引詞。

2、文本(text)

文本是一段普通的非結構化文字。搜索引擎應該能夠根據索引詞找到原文。

3、分析(analysis)

分析是把文本轉化爲索引詞的過程。分析的結果依賴分詞器。

4、集羣(cluster)

5、節點(node)

6、路由(routing)

當存儲一個文檔,它會存儲在唯一的一個主分片中,具體哪個分片通過散列值確定。

7、分片(shard)

分片是單個lucene實例。索引是指向主分片和副本分片的邏輯空間。

8、主分片(primary shard)

每個文檔只存在在主分片中,然後複製到不同副本,默認一個索引有5個主分片

9、副本分片(replica shard)

每一個分片可以有0個多個副本。副本是針對每個分片的。分片個數 x 副本數量 = 總副本分片個數。

10、複製(replica)

每個索引可以拆分成多個分片。索引可以複製0個或多個分片。一旦複製,就有了主分片與副本分片。分片的數量和副本的數量可以在創建索引時創建。創建索引後可以修改副本的數量,但是不可以修改分片的數量。默認每個索引分配5個分片和一個副本,則集羣至少需要2個節點,包括5分主分片和5個副本分片

11、索引(index)

索引是具有相同結構的文檔集合。例如客戶索引,目錄索引,訂單索引等。

12、類型(type)

在索引中可以定義一個或多個類型,類型是索引的邏輯分區。一般情況,一種類型被定義爲具有一組公共字段的文檔

13、文檔(document)

存儲的一個JSON格式字符串。每個存在在索引中的一個文檔,都有一個ID和類型。每個文檔都是一個JSON對象,存儲了0個或多個字段(或者鍵值對),原始的JSON文檔被存在一個叫做_source的字段中,索引返回值默認就是這個字段。

14、映射(mapping)

映射像關係數據庫中的表結構,每個索引都有一個映射,定義了索引中的每個字段類型以及一個索引範圍的設置。一個映射可以事先定義或者自動識別。

15、字段(field)

文檔中包含0個或多個字段,字段可以是一個簡單的值,也可以是數組或者嵌套對象。

16、來源字段(source field)

源文檔被存在_source字段,索引時返回。

17、主鍵(ID)

文檔的id/type/index必須是唯一的。

映射詳解

字段數據類型

  • 字符串類型:string(3.x後改成了text類型)
  • 整數 : byte,short,integer,long
  • 浮點數:float,double
  • 布爾型: boolean
  • 日期: date

字段屬性(約束條件)

  • type:指定該字段的數據類型,值爲上述列出的“字段數據類型”,不指定的話,由elasticsearch自動判斷。

  • index:指定該字段是否索引,接收值爲true和false,字符串類型默認爲true,其他的數據類型默認爲false。值爲true的話會做分詞。值爲false的話不分詞,原樣寫入索引中。

  • ignore_above:接受整數值,如果字符串長度長於這個值,則不寫入索引,不指定的話默認爲0。

  • analyzer:如果該字段需要索引的話,指定索引時使用的分詞器,不指定的話默認使用標準分詞器分詞。

  • search_analyzer:指定搜索時使用的分詞器,不知道的話使用標準分詞器分詞。

  • store:值爲yes和no,默認爲no。指定是否將該字段的原始文檔寫入索引。在elasticsearch中,因爲_source中(_source下面解析)已經存儲了一份原始文檔,在索引中再存儲原始文檔就多餘了,所以Elasticsearch默認是把store屬性設置爲no。

  • include_in_all:指定該字段是否需要包含在_all中(_all下面解析),接收值爲true和false,默認爲flase。

  • null_value:如果該字段的值爲null,則用該值代替。

  • format:格式化日期類型,比如:yyyy-MM-dd HH:mm:ss||yyyy-MM-dd。默認strict_date_optional_time||epoch_millis

元數據類型

每一個文檔都有與之關聯的元數據,元數據字段是爲了保證系統正常運行內置字段,比如_index表示索引字段,_type表示類型,_id表示文檔主鍵,這些字段都是以下劃線開始的,除了這些元數據之外,還有兩個很重要的元數據,它們是_all_source,這兩個元數據字段可以在我們創建類型映射的時候,指定約束條件,我們接着來看看:

  • _source:

存儲的文檔的原始值。默認_source字段是開啓的,也可以關閉。如果想要關閉_source字段,在mapping中的設置如下:

{
  "typename":{
      "_source":{
          "enabled":false
      },
      "properties": {
          ... 
      }
  }
}
 

 如果只想存儲某幾個字段的原始值到elasticsearch,可以通過incudes參數來設置,同樣,可以通過excludes參數排除某些字段。在mapping中的設置如下:

{
  "typename":{
      "_source":{
          "includes":["field1","field2"],

          "excludes":["field3","field4"]
      },
      "properties": {
          ... 
      }
  }
}

  • _all:

包含全部內容的字段,默認是關閉的,開啓_all字段的方法和_source類似,mapping中的配置如下:

{
 "typename": {
    "_all": {
       "enabled": true
    },
    "properties": {
          ... 
    }
 }
}

 也可以通過在字段中指定某個字段是否包含在_all中:

{
 "yourtype": {
    "typename": {
       "field1": {
           "type": "string",
           "include_in_all": false
        },
        "field2": {
           "type": "string",
           "include_in_all": true
        }
    }
 }
}

對外接口

ES對外接口以HTTP協議,以JSON格式REST約定對外提供。

HTTP配置放在elasticsearch.yml中,都是靜態屬性,必須重啓生效。HTTP對外接口模塊是可以禁用的,設置http.enabled = false 。

API約定

多索引參數

  • _all

全部索引

  • *

通配符,統配多個字符

  • ignore_unavailable

當索引不存在或關閉時,是否忽略索引。true、false

  • allow_no_indices

使用通配符查詢索引,索引不存在時,是否返回失敗。true、false。

  • expand_wildcards

控制通配符索引表達式匹配哪一類索引。包括open(開啓),close(關閉),none(不可用),all(開啓和關閉)

日期篩選

幾乎所有API都支持日期篩選。

語法:

<static_name {date_math_expr{date_format|time_zone}}>

  • static_name :索引名稱
  • date_math_expr:動態日期計算表達式
  • date_format:日期格式
  • time_zone:時區,默認UTC

例如:

<secilog-{now/d{YYYY.MM.dd+12:00}}>

通用參數

1、pretty

?pretty=true,返回JSON格式,或者

?format=yaml,YAML格式

2、human

?human=true,返回更適合人類閱讀的格式

3、日期表達式

  • ||
  • 分割符號
  • +
  • 加一個單位
  • -
  • 減一個單位
  • /
  • 取整

支持的時間單位:y(年),M(月),w(周),d(日),H(時),m(分),s(秒)

4、響應過濾(filter_path)

通過filter_path過濾返回內容

?filter_path=took,hits*

支持通配符(*),逗號分割。

基於URL的訪問控制

可以通過配置文件限制某個用戶對索引的請求

REST

POST,GET,PUT,DELETE

HEAD插件

Head插件作爲url請求工具,需要在服務器安裝

http://host:port/_plugin/head

創建庫

http:/*/secisland?pretty

返回:

{ "acknowledged":true} //表示成功

插入數據

修改文檔

刪除文檔

刪除庫

JAVA API

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章