日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

搜索引擎ElasticSearch

發布時間:2024/10/6 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索引擎ElasticSearch 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1、Elasticsearch相關介紹

1.1.1 ES能做什么?
全文檢索(全部字段)、模糊查詢(搜索)、數據分析(提供分析語法,例如聚合)

1.1.2 ElasticSearch5和ElasticSearch6區別
ElasticSearch6(和ElasticSearch5的區別在于,root用戶權限,一個庫能否建立多張表)

1.1.3elasticSearch(搜索引擎)B+tree算法
倒排索引(內容上建立索引,用內容匹配索引)

1.2、Elasticsearch安裝

1.2.1安裝環境:centos7+jdk8
1.2.2配置文件/config elasticsearch.yml(集群文件)與jvm.options(Jvm配置文件)

1.2.3上傳解并解壓到centos /opt/es目錄下
4. 在opt下新建目錄:mkdir -p /opt/es
5. 上傳并解壓 tar -zxvf elasticsearch-6.3.1.tar.gz、elasticsearch-analysis-ik6.rar、kibana-6.3.1-linux-x86_64.tar.gz
6. chmod 777 -R(循環授權所有目錄) elasticsearch-6.3.1

1.2.4配置
Es使用最大線程數、最大內存數、訪問的最大文件數

  • 啟動腳本elasticsearch

  • 創建用戶并切換

    • 創建用戶:adduser es
    • 切換用戶:su es
  • 執行腳本./elasticsearch

  • 忽略日志啟動腳本:nohup ./elasticsearch &

  • 出現問題

    • Es使用Jvm內存大小不夠用
  • 修改配置文件

    • vim elasticsearch-6.3.1/config/jvm.options 配置jvm的內存大小
    • 在elasticSearch.yml中配置host地址(本機地址),外網允許訪問

      • 啟動問題:Es使用最大線程數、最大內存數、訪問的最大文件數

      • 需要修改兩處配置文件

      • 修改Linux的limits文件,設置內存線程和文件
      • 修改Linux的sysctl文件,配置系統使用內存
      • Es權限問題

      • 首先root用戶解壓: tar -zxvf elasticsearch-6.3.1.tar.gz
      • chmod 777 -R(循環授權所有目錄) elasticsearch-6.3.1

      es文件四處需要修改

      1.3、Elasticsearch的基本概念

      1.通過(9200端口)http協議進行交互

      http://47.101.36.177:9200/_cat/indices?v

      2.基本概念

    關鍵字含義
    cluster整個elasticsearch 默認就是集群狀態,整個集群是一份完整,互備的數 據。
    node集群中的一個節點,一般只一個進程就是一個node
    shard分片,即使是一個節點中的數據也會通過hash算法,分成多個片存放,默認是5片。
    index相當于rdbms的database, 對于用戶來說是一個邏輯數據庫,雖然物理上會被分多個shard存放,也可能存放在多個node中。
    type類似于rdbms的table,但是與其說像table,其實更像面向對象中的class , 同一Json的格式的數據集合。
    document類似于rdbms的 row、面向對象里的object
    field相當于字段、屬性

    3.開發工具kibana

    • 解壓kibana:tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz
    • 配置kibana的es信息:vim kibanna.yml
    • 啟動kibana:nohup ./kibana &
    • 查看kibana的進程id

    3.elasticSearch簡單版增刪改查

    • 插入數據put
    PUT /movie_index/movie/1 { "id":1,"name":"operation red sea","doubanScore":8.5,"actorList":[ {"id":1,"name":"zhang yi"}, {"id":2,"name":"hai qing"}, {"id":3,"name":"zhang han yu"} ] }
    • 查詢數據get

      查詢帶"紅"的所有內容
    GET movie_index/movie/_search {"query": {"match": {"name": "red"}}}

    4.elasticSearc對中文的理解

    • 中文拆詞
    GET _analyze {"text": "湄公河行動" }
    • 中文拆詞結果
    {"tokens": [{"token": "湄","start_offset": 0,"end_offset": 1,"type": "<IDEOGRAPHIC>","position": 0},{"token": "公","start_offset": 1,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 1},{"token": "河","start_offset": 2,"end_offset": 3,"type": "<IDEOGRAPHIC>","position": 2},{"token": "行","start_offset": 3,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 3},{"token": "動","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}] }
    • 加入中文分詞器
    • 進入插件目錄,解壓analysis-ik分詞器

    • IK(中英文分詞器)有兩個

      • ik_smart(簡易分詞)
      GET _analyze {"analyzer": "ik_smart", "text": "如果緩存中沒有再到MySQL" }

      分詞結果

      {"tokens": [{"token": "如果", #分詞"start_offset": 0, #開始偏移"end_offset": 2, #結束偏移"type": "CN_WORD", #單詞類型"position": 0 #位置},{"token": "緩存","start_offset": 2,"end_offset": 4,"type": "CN_WORD","position": 1},{"token": "中","start_offset": 4,"end_offset": 5,"type": "CN_CHAR","position": 2},{"token": "沒有","start_offset": 5,"end_offset": 7,"type": "CN_WORD","position": 3},{"token": "再到","start_offset": 7,"end_offset": 9,"type": "CN_WORD","position": 4},{"token": "mysql","start_offset": 9,"end_offset": 14,"type": "ENGLISH","position": 5}] }
      • ik_max_work(盡最大可能分詞)
    • Kibana出現異常
    log [11:49:18.892] [warning][admin][elasticsearch] No living connectionslog [11:49:18.894] [warning][admin][elasticsearch] Unable to revive connection: http://node1:9200/log [11:49:18.894] [warning][admin][elasticsearch] No living connectionserror [11:49:18.896] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log [11:49:18.897] [warning][stats-collection] Unable to fetch data from kibana collectorerror [11:49:18.897] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log [11:49:18.899] [warning][stats-collection] Unable to fetch data from canvas collectorerror [11:49:18.900] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log [11:49:18.902] [warning][stats-collection] Unable to fetch data from kql collectorerror [11:49:18.909] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log [11:49:18.927] [warning][stats-collection] Unable to fetch data from rollups collectorerror [11:49:18.928] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9)log [11:49:18.929] [warning][stats-collection] Unable to fetch data from reporting collectorerror [11:49:18.929] [warning][stats-collection] Error: No Living connectionsat sendReqWithConnection (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/transport.js:226:15)at next (/opt/kibana-6.5.1-linux-x86_64/node_modules/elasticsearch/src/lib/connection_pool.js:214:7)at _combinedTickCallback (internal/process/next_tick.js:131:7)at process._tickDomainCallback (internal/process/next_tick.js:218:9

    關閉kibbana

    [root@izuf6cn5k7l8xuxojhszqbz es]# ps -ef | grep node root 4676 4652 0 22:17 pts/1 00:00:00 grep --color=auto node root 9689 1 0 Jan09 ? 00:03:47 ./../node/bin/node --no-warnings ./../src/cli [root@izuf6cn5k7l8xuxojhszqbz es]# kill 9689
    • 分詞相關性算分

      影響相關度算分的參數:
      1、TF(Term Frequency):詞頻,即單詞在文檔中出現的次數,詞頻越高,相關度越高
      2、Document Frequency(DF):文檔詞頻,即單詞出現的文檔數
      3、IDF(Inverse Document Frequency):逆向文檔詞頻,與文檔詞頻相反,即1/DF。即單詞出現的文檔數越少,相關度越高(如果一個單詞在文檔集出現越少,算為越重要單詞)
      4、Field-length Norm:文檔越短,相關度越高

    5.elasticSearch的集群

    • 集群配置vim elasticSearch.yml
    #集群的名稱 cluster.name: steven-es #節點名稱,其余兩個節點分別為node-2 和node-3 node.name: node-1 #指定該節點是否有資格被選舉成為master節點,默認是true,es是默認集群中的第一臺機器為master,如果這臺機掛了就會重新選舉master node.master: true #允許該節點存儲數據(默認開啟) node.data: true #索引數據的存儲路徑 path.data: /opt/es/elasticsearch/data/node1 #日志文件的存儲路徑 path.logs: /opt/es/elasticsearch/log/node1 #設置為true來鎖住內存。因為內存交換到磁盤對服務器性能來說是致命的,當jvm開始swapping時es的效率會降低,所以要保證它不swap bootstrap.memory_lock: true #綁定的ip地址 network.host: 192.168.100.97 #設置對外服務的http端口,默認為9200 http.port: 9201 # 設置節點間交互的tcp端口,默認是9300 transport.tcp.port: 9301 #Elasticsearch將綁定到可用的環回地址,并將掃描端口93009305以嘗試連接到運行在同一臺服務器上的其他節點。 #這提供了自動集群體驗,而無需進行任何配置。數組設置或逗號分隔的設置。每個值的形式應該是host:port或host #(如果沒有設置,port默認設置會transport.profiles.default.port 回落到transport.tcp.port)。 #請注意,IPv6主機必須放在括號內。默認為127.0.0.1, [::1] #其他兩個節點的端口號(不包含自己) discovery.zen.ping.unicast.hosts: ["192.168.100.97:9302", "192.168.100.97:9303"] #如果沒有這種設置,遭受網絡故障的集群就有可能將集群分成兩個獨立的集群 - 分裂的大腦 - 這將導致數據丟失 discovery.zen.minimum_master_nodes: 2
    • 可能出現問題
      jvm:內存太大

      解決辦法:在jvm.options 中調整JVM最大可用內存(Xmx)、初始化內存(Xms)

    5.節點、分片、索引

    • 節點
      一個節點就是一個es的服務器,es集群中主節點主要負責集群的管理和任務的分發,一般文檔的不負責增刪改查
    • 分片
      分片是es的實際物理單元(一個lucene的實例)
    • 索引
      索引是es的物理單元,一個索引建立在不同分片的機器上
    • 復制片
      每個機器的分片一般都會在其他機器上由2~3個復制片(提高數據的容錯率)
    • 容錯
      一旦集群中的某些機器發生故障,會在其他機器的管理下重新分配資源
    • 分片路由
      • 寫操作(新建、刪除)只能在主分片上進行,然后將結果同步到復制分片
      • Syn 主分片同步成功后,才返回給客戶端
      • Sync 主分片在操作成功后,再復制給同步分片的同時返回給客戶端
      • 查詢操作可以在主分片或同步分片上都可以

    總結

    以上是生活随笔為你收集整理的搜索引擎ElasticSearch的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。