首頁 > 軟體

Elasticsearch之倒排索引及索引操作

2022-04-19 13:01:11

倒排索引

一 倒排索引是什麼

倒排索引源於實際應用中需要根據屬性的值來查詢記錄,這種索引表中的每一個項都包括一個屬性值和具有該屬性值的各記錄的地址。由於不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而成為倒排索引。帶有倒排索引的檔案我們稱之為倒排索引檔案,簡稱倒排檔案

二 舉例

例如有如下三個檔案:

檔案A:通過Python django搭建網站

檔案B:通過Python scrapy爬取網站資料

檔案C:scrapy-redis分散式爬蟲

現在我們要查詢,帶有Python的檔案,正常是對每個檔案進行遍歷,每個檔案遍歷一次,如果檔案特別大,每個檔案有一億個字元,總共有一億各檔案,每個我們都要遍歷,非常消耗資源

在儲存檔案之前,先對檔案進行分析,將檔案分詞,對分詞建立索引,例如下面一句話

1 今天是星期天我們出去玩

2 明天是星期天,放假

3 今天天氣很晴朗

4 xxx

5 他們出去玩了

關鍵詞文章
今天文章1,文章3
星期天文章2
出去玩文章5,文章1

實際上es在做儲存的時候,更詳細,如下表

關鍵詞文章
今天(文章1,<2,10>,2) (文章3,<8>,1)
星期天(文章2,<12,25,100>,3)
出去玩(文章5,<11,24,89>,3)(文章1,<8,19>,2)

今天出現在哪個文章,出現的位置和出現的次數

三 倒排索引待解決的問題

1 大小寫轉換問題,如python和Python應該為同一個詞

2 詞幹抽取,looking和look應該處理為同一個詞

3 分詞,如 遮蔽系統 是遮蔽 和系統兩個詞還是 為遮蔽系統一個詞

4 倒排索引檔案過大,需要壓縮編碼

索引操作

具體操作可以檢視官方檔案

https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices.html>

官方2版本的中文檔案

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index-settings.html

一 索引初始化

#新建一個lqz2的索引,索引分片數量為5,索引副本數量為1
PUT lqz2
{
  "settings": {
    "index":{
      "number_of_shards":5,
      "number_of_replicas":1
    }
  }
}
'''
number_of_shards
每個索引的主分片數,預設值是 5 。這個設定在索引建立後不能修改。
number_of_replicas
每個主分片的副本數,預設值是 1 。對於活動的索引庫,這個設定可以隨時修改。
'''

二 查詢索引設定

#獲取lqz2索引的設定資訊
GET lqz2/_settings
#獲取所有索引的設定資訊
GET _all/_settings
#同上
GET _settings
#獲取lqz和lqz2索引的設定資訊
GET lqz,lqz2/_settings

三 更新索引

#修改索引副本數量為2
PUT lqz/_settings
{
  "number_of_replicas": 2
}
#如遇到報錯:cluster_block_exception,因為
#這是由於ES新節點的資料目錄data儲存空間不足,導致從master主節點接收同步資料的時候失敗,此時ES叢集為了保護資料,會自動把索引分片index置為唯讀read-only
PUT  _all/_settings
{
"index": {
  "blocks": {
    "read_only_allow_delete": false
    }
  }
}

四 刪除索引

#刪除lqz索引
DELETE lqz

以上就是Elasticsearch之倒排索引及索引操作的詳細內容,更多關於Elasticsearch倒排索引索引操作的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com