成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

搜索引擎 - ElasticSearch

zengdongbao / 1269人閱讀

摘要:注是開(kāi)源項(xiàng)目,預(yù)先安裝和。一介紹是基于的開(kāi)源搜索引擎,目前被認(rèn)為是最先進(jìn)性能最好功能最全的搜索引擎。具體詳見(jiàn)這章分析器。由于最近在用多進(jìn)程并發(fā)查詢的功能,當(dāng)請(qǐng)求數(shù)量在一段時(shí)間內(nèi)增加時(shí),會(huì)有多個(gè)進(jìn)程的響應(yīng)超時(shí)的問(wèn)題。

注:ES是Java開(kāi)源項(xiàng)目,預(yù)先安裝Jre和NodeJS。

一、介紹

Elasticsearch是基于Apache Lucene的開(kāi)源搜索引擎,目前被認(rèn)為是最先進(jìn)、性能最好、功能最全的搜索引擎。

1、名詞

分片:集群中節(jié)點(diǎn)存放文檔的地方,分片保存在不同節(jié)點(diǎn)可用于數(shù)據(jù)恢復(fù),每個(gè)分片占用的CPU、RAM、IO越高索引速度就越快

index(索引): 類似數(shù)據(jù)庫(kù),多個(gè)索引就代表多個(gè)數(shù)據(jù)庫(kù)

type(類型): 類似表名

mapping :表結(jié)構(gòu)

doc(文檔):數(shù)據(jù),一條Json數(shù)據(jù)為一個(gè)文檔

ES Json :ES API請(qǐng)求模板,用于索引數(shù)據(jù),格式ES有嚴(yán)格規(guī)定(不同版本有區(qū)別)

filter(過(guò)濾):ES有倆種查詢模式,一是根據(jù)條件查詢(速度慢),二全部查詢后再條件過(guò)濾

aggs(聚合):類似數(shù)據(jù)庫(kù)的group by,可多個(gè)聚合嵌套使用

二、安裝配置

以下為單節(jié)點(diǎn)配置:

1、下載 ES壓縮包,解壓到本地。

2、打開(kāi)/ES/config/下 elasticsearch.yml

為了顯示整潔,去掉了注釋和沒(méi)使用的配置項(xiàng)

# ---------------------------------- Cluster -----------------------------------
cluster.name: elasticsearch #ES根據(jù)此名將節(jié)點(diǎn)放到集群中

# ------------------------------------ Node ------------------------------------
node.name: node-master #節(jié)點(diǎn)名稱,集群需更改!!!

# ----------------------------------- Paths ------------------------------------
#path.data: /path/to/data
#path.logs: /path/to/logs

# ----------------------------------- Memory -----------------------------------
#bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------
network.host: 127.0.0.1 #節(jié)點(diǎn)綁定的ip
transport.tcp.port: 9301 #集群需更改!!!
http.port: 9401 #集群需更改!!!

# --------------------------------- Discovery ----------------------------------
#discovery.zen.ping.unicast.hosts: ["host1", "host2"] #主節(jié)點(diǎn)列表
##########Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):##########
discovery.zen.minimum_master_nodes: 1 #至少1個(gè)主節(jié)點(diǎn)

# ---------------------------------- Gateway -----------------------------------
#gateway.recover_after_nodes: 3

# ---------------------------------- Various -----------------------------------
#action.destructive_requires_name: true
1、命令

1、命令行到/ES/bin/下,運(yùn)行 elasticsearchelasticsearch -d 隱藏運(yùn)行

2、非隱藏運(yùn)行可使用 Ctrl+C 關(guān)閉。隱藏模式可使用 ps -ef | grep elasticjps 查看進(jìn)程號(hào)

3、當(dāng)集群中的節(jié)點(diǎn)出現(xiàn)紅色Unassigned,則檢查處理問(wèn)題(節(jié)點(diǎn)狀態(tài)可使用下面的ES插件進(jìn)行觀察等其它操作

(1)查看集群相關(guān)信息

curl "localhost:9401/_nodes/process?pretty"

(2)找出 UNASSIGNED 相關(guān)信息

curl -XGET localhost:9401/_cat/shards|grep UNASSIGNED

(3)依次修改以上UNASSIGNED

curl -XPOST "localhost:9401/_cluster/reroute" -d "{
    "commands" : [ {
        "allocate" : {
            "index" : "graylog_83",
            "shard" : 1,
            "node" : "Auq82gfGQVWgOBw6S7ajRQ",
            "allow_primary" : true
        }
    }]
}"
2、安裝ES監(jiān)控

1、下載開(kāi)源項(xiàng)目 elasticsearch-head

2、進(jìn)入到elasticsearch-head下,命令行 npm install grunt-cli 安裝grunt客戶端

3、在elasticsearch-head下打開(kāi)Gruntfile.js

4、運(yùn)行監(jiān)控插件及結(jié)果

三、ES Api 1、創(chuàng)建索引

{
    "student": {
        "properties": {
            "no": {
                "type": "string",
                "fielddata": true,
                "index": "analyzed"
            },
            "name": {
                "type": "string",
                "index": "analyzed"
            },
            "age": {
                "type": "integer"
            },
            "birth": {
                "type": "date",
                "format": "yyyy-MM-dd"
            },
            "isLeader": {
                "type": "boolean"
            }
        }
    }

}

然后用REST方式調(diào)用ES接口創(chuàng)建索引和類型:

ES監(jiān)控插件上顯示:

2、bulk批處理

bulk API 允許在單個(gè)步驟中進(jìn)行多次 create 、 index 、 update 或 delete 請(qǐng)求。

curl -XPOST "http://172.16.13.4:9401/_bulk?pretty" -d "
{"delete": {"_index": "megacorp", "_type": "employee", "_id": "2"}}
{"create": {"_index": "megacorp", "_type": "employee", "_id": "2"}}
{"name": "first"}
{"index": {"_index": "megacorp", "_type": "employee"}}

3、ES分析器

分析器包括三個(gè)功能:字符過(guò)濾器(過(guò)濾掉HTML,特殊符號(hào)轉(zhuǎn)換)、分詞器也叫分析器(標(biāo)準(zhǔn)分析器、簡(jiǎn)單、空格、語(yǔ)言分析器)、token過(guò)濾器(刪除改變無(wú)用詞)。具體詳見(jiàn)這章 ES分析器。

四、ES集群

配置很簡(jiǎn)單就不做詳細(xì)說(shuō)明了,原理跟redis集群差不多,判斷節(jié)點(diǎn)超時(shí)、投票選取主節(jié)點(diǎn)。

#####################################主節(jié)點(diǎn)1#####################################
# ---------------------------------- Cluster -----------------------------------
cluster.name: alex-es

# ------------------------------------ Node ------------------------------------
node.name: node1
node.master: true
node.data: true

# ----------------------------------- Path ------------------------------------
path.data: /path/to/data
path.logs: /path/to/logs

# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------
network.host: 172.16.13.4
transport.tcp.port: 9301
transport.tcp.compress: true
http.port: 9401
http.max_content_length: 100mb
http.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

# --------------------------------- Discovery ----------------------------------
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["172.16.13.4:9301", "172.16.13.4:9302"]

# ---------------------------------- Gateway -----------------------------------
gateway.recover_after_nodes: 3
gateway.recover_after_time: 5m
gateway.expected_nodes: 3
#####################################主節(jié)點(diǎn)2#####################################
# ---------------------------------- Cluster -----------------------------------
cluster.name: alex-es

# ------------------------------------ Node ------------------------------------
node.name: node2
node.master: true
node.data: true

# ----------------------------------- Path ------------------------------------
path.data: /path/to/data2
path.logs: /path/to/logs2

# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------
network.host: 172.16.13.4
transport.tcp.port: 9302
transport.tcp.compress: true
http.port: 9402
http.max_content_length: 100mb
http.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

# --------------------------------- Discovery ----------------------------------
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["172.16.13.4:9301", "172.16.13.4:9302"]

# ---------------------------------- Gateway -----------------------------------
gateway.recover_after_nodes: 3
gateway.recover_after_time: 5m
gateway.expected_nodes: 3
#####################################子節(jié)點(diǎn)######################################
# ---------------------------------- Cluster -----------------------------------
cluster.name: alex-es

# ------------------------------------ Node ------------------------------------
node.name: node3
node.master: false
node.data: true

# ----------------------------------- Path ------------------------------------
path.data: /path/to/data3
path.logs: /path/to/logs3

# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: true

# ---------------------------------- Network -----------------------------------
network.host: 172.16.13.4
transport.tcp.port: 9303
transport.tcp.compress: true
http.port: 9403
http.max_content_length: 100mb
http.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

# --------------------------------- Discovery ----------------------------------
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["172.16.13.4:9301", "172.16.13.4:9302"]

# ---------------------------------- Gateway -----------------------------------
gateway.recover_after_nodes: 3
gateway.recover_after_time: 5m
gateway.expected_nodes: 3

以上配置信息不能包含空格,配置好后,全部啟動(dòng),在ES-head上監(jiān)控顯示:

五、ES客戶端問(wèn)題

官方提供了基于Python、Java等語(yǔ)言的客戶端,其中實(shí)現(xiàn)了對(duì)es連接池輪訓(xùn)、查詢、索引、批量等操作。

由于最近在用多進(jìn)程并發(fā)查詢es的功能,當(dāng)請(qǐng)求數(shù)量在一段時(shí)間內(nèi)增加時(shí),會(huì)有多個(gè)進(jìn)程的響應(yīng)超時(shí)的問(wèn)題。

經(jīng)過(guò)調(diào)查,已排查掉以下可能存在的問(wèn)題:

1、Java GC機(jī)制問(wèn)題(包括并發(fā)GC、FullGC、GCone等),因?yàn)楦鶕?jù)GC的機(jī)制不同,會(huì)影響es的性能
2、es隊(duì)列大小
3、進(jìn)程池,基本上是同一時(shí)間異步調(diào)用es查詢,所以這個(gè)不存在問(wèn)題
4、CPU內(nèi)存及es配置優(yōu)化等

最后在服務(wù)器上抓包發(fā)現(xiàn),部分請(qǐng)求要經(jīng)過(guò)一定時(shí)間才能傳到es上,而且隨著請(qǐng)求數(shù)量加大,時(shí)間間隔有遞增趨勢(shì),這樣問(wèn)題就定位在es客戶端發(fā)送請(qǐng)求那。

經(jīng)過(guò)一番研究,可能是es客戶端所采用的傳輸協(xié)議會(huì)導(dǎo)致請(qǐng)求時(shí)間延長(zhǎng),最后決定用Python的 pycurl 來(lái)代替es客戶端,下面是代碼,可以自己實(shí)現(xiàn)es輪訓(xùn):

import pycurl
import StringIO
import random

def es_pool():
    return ["ip:port", "ip:port"]

# curl請(qǐng)求
def curl_req(index="", rtype="", body=""):
    s = StringIO.StringIO()
    c = pycurl.Curl()

    es_hosts = es_pool()
    host = es_hosts[random.randint(0, len(es_hosts)) % len(es_hosts)]  # 根據(jù)es池大小隨機(jī)選擇
    url = host + "/" + index + "/" + rtype + "/_search"

    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.POSTFIELDS, body)
    c.setopt(pycurl.WRITEFUNCTION, s.write)
    c.perform()
    c.close()
    return s.getvalue()

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/35817.html

相關(guān)文章

  • Solr vs. Elasticsearch誰(shuí)是開(kāi)源搜索引擎王者

    摘要:本文,我們將比較業(yè)界兩個(gè)最流行的開(kāi)源搜索引擎,和。關(guān)于基于業(yè)界大名鼎鼎的開(kāi)源搜索引擎,更多的是一個(gè)軟件包,還不能稱之為搜索引擎,而則完成對(duì)的封裝,是一個(gè)真正意義上的搜索引擎框架。 當(dāng)前是云計(jì)算和數(shù)據(jù)快速增長(zhǎng)的時(shí)代,今天的應(yīng)用程序正以PB級(jí)和ZB級(jí)的速度生產(chǎn)數(shù)據(jù),但人們依然在不停的追求更高更快的性能需求。隨著數(shù)據(jù)的堆積,如何快速有效的搜索這些數(shù)據(jù),成為對(duì)后端服務(wù)的挑戰(zhàn)。本文,我們將比較業(yè)...

    freewolf 評(píng)論0 收藏0
  • Elasticsearch,為了搜索

    摘要:為了方便調(diào)試,可以修改文件,加入以下兩行安裝中文分詞插件原裝分詞器會(huì)簡(jiǎn)單地拆分每個(gè)漢字,沒(méi)有根據(jù)詞庫(kù)來(lái)分詞,這樣的后果就是搜索結(jié)果很可能不是你想要的。原文鏈接參考資料權(quán)威指南為你的站點(diǎn)插上的翅膀安裝中文分詞中的簡(jiǎn)介使用實(shí)現(xiàn)博客站內(nèi)搜索 Elasticsearch是一個(gè)基于Apache Lucene(TM)的開(kāi)源搜索引擎。無(wú)論在開(kāi)源還是專有領(lǐng)域,Lucene可以被認(rèn)為是迄今為止最先進(jìn)、...

    mindwind 評(píng)論0 收藏0
  • 使用Node,Vue和ElasticSearch構(gòu)建實(shí)時(shí)搜索引擎

    摘要:建立在之上,它是一個(gè)高性能的文本搜索引擎庫(kù)。目錄在今天的課程中,您將學(xué)習(xí)如何使用,和構(gòu)建實(shí)時(shí)搜索引擎。接下來(lái),您需要安裝實(shí)時(shí)搜索引擎所需的庫(kù)。這是的官方庫(kù),它是實(shí)時(shí)搜索的引擎。主要的搜索查詢包含在查詢對(duì)象中。但是,可以從客戶端進(jìn)行搜索。 (譯者注:相關(guān)閱讀:node.js,vue.js,Elasticsearch) 介紹 Elasticsearch是一個(gè)分布式的RESTful搜索和分析...

    jerryloveemily 評(píng)論0 收藏0
  • 使用Node,Vue和ElasticSearch構(gòu)建實(shí)時(shí)搜索引擎

    摘要:建立在之上,它是一個(gè)高性能的文本搜索引擎庫(kù)。目錄在今天的課程中,您將學(xué)習(xí)如何使用,和構(gòu)建實(shí)時(shí)搜索引擎。接下來(lái),您需要安裝實(shí)時(shí)搜索引擎所需的庫(kù)。這是的官方庫(kù),它是實(shí)時(shí)搜索的引擎。主要的搜索查詢包含在查詢對(duì)象中。但是,可以從客戶端進(jìn)行搜索。 (譯者注:相關(guān)閱讀:node.js,vue.js,Elasticsearch) 介紹 Elasticsearch是一個(gè)分布式的RESTful搜索和分析...

    GHOST_349178 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<