日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

搜索引擎ElasticSearch

發(fā)布時(shí)間:2024/10/6 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索引擎ElasticSearch 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.1、Elasticsearch相關(guān)介紹

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

1.1.2 ElasticSearch5和ElasticSearch6區(qū)別
ElasticSearch6(和ElasticSearch5的區(qū)別在于,root用戶權(quán)限,一個(gè)庫(kù)能否建立多張表)

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

1.2、Elasticsearch安裝

1.2.1安裝環(huán)境: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(循環(huán)授權(quán)所有目錄) elasticsearch-6.3.1

1.2.4配置
Es使用最大線程數(shù)、最大內(nèi)存數(shù)、訪問(wèn)的最大文件數(shù)

  • 啟動(dòng)腳本elasticsearch

  • 創(chuàng)建用戶并切換

    • 創(chuàng)建用戶:adduser es
    • 切換用戶:su es
  • 執(zhí)行腳本./elasticsearch

  • 忽略日志啟動(dòng)腳本:nohup ./elasticsearch &

  • 出現(xiàn)問(wèn)題

    • Es使用Jvm內(nèi)存大小不夠用
  • 修改配置文件

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

      • 啟動(dòng)問(wèn)題:Es使用最大線程數(shù)、最大內(nèi)存數(shù)、訪問(wèn)的最大文件數(shù)

      • 需要修改兩處配置文件

      • 修改Linux的limits文件,設(shè)置內(nèi)存線程和文件
      • 修改Linux的sysctl文件,配置系統(tǒng)使用內(nèi)存
      • Es權(quán)限問(wèn)題

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

      es文件四處需要修改

      1.3、Elasticsearch的基本概念

      1.通過(guò)(9200端口)http協(xié)議進(jìn)行交互

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

      2.基本概念

    關(guān)鍵字含義
    cluster整個(gè)elasticsearch 默認(rèn)就是集群狀態(tài),整個(gè)集群是一份完整,互備的數(shù) 據(jù)。
    node集群中的一個(gè)節(jié)點(diǎn),一般只一個(gè)進(jìn)程就是一個(gè)node
    shard分片,即使是一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)也會(huì)通過(guò)hash算法,分成多個(gè)片存放,默認(rèn)是5片。
    index相當(dāng)于rdbms的database, 對(duì)于用戶來(lái)說(shuō)是一個(gè)邏輯數(shù)據(jù)庫(kù),雖然物理上會(huì)被分多個(gè)shard存放,也可能存放在多個(gè)node中。
    type類似于rdbms的table,但是與其說(shuō)像table,其實(shí)更像面向?qū)ο笾械腸lass , 同一Json的格式的數(shù)據(jù)集合。
    document類似于rdbms的 row、面向?qū)ο罄锏膐bject
    field相當(dāng)于字段、屬性

    3.開發(fā)工具kibana

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

    3.elasticSearch簡(jiǎn)單版增刪改查

    • 插入數(shù)據(jù)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"} ] }
    • 查詢數(shù)據(jù)get

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

    4.elasticSearc對(duì)中文的理解

    • 中文拆詞
    GET _analyze {"text": "湄公河行動(dòng)" }
    • 中文拆詞結(jié)果
    {"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": "動(dòng)","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 4}] }
    • 加入中文分詞器
    • 進(jìn)入插件目錄,解壓analysis-ik分詞器

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

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

      分詞結(jié)果

      {"tokens": [{"token": "如果", #分詞"start_offset": 0, #開始偏移"end_offset": 2, #結(jié)束偏移"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": "沒(méi)有","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出現(xiàn)異常
    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

    關(guān)閉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
    • 分詞相關(guān)性算分

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

    5.elasticSearch的集群

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

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

    5.節(jié)點(diǎn)、分片、索引

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

    總結(jié)

    以上是生活随笔為你收集整理的搜索引擎ElasticSearch的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。