針對用戶請求的URL,統計時作模式匹配;
即用戶真正去打開一個站點的有效頁面並對每一個頁面的入口的訪問作一個統計瀏覽量;html
簡要搜索引擎
搜索引擎在互聯網上特別多有專業(Startpage,Google,Yahoo,Baidu)等也有非專業開源(北大搜索、任何基於Lucene庫的二次開發搜索代理引擎)等;
其重點都是用來作海量數據搜索存儲、分析,而且根據用戶指定的filter來過濾出用戶所須要的數據。而背後所需基礎組件無外乎是 索引鏈、搜索等各組件;java
索引鏈:
可以把數據收集進來,存儲下來併爲其構建一個索引,即把數據收集起來構建索引;
索引鏈實現獨立步驟:檢索原始內容,根據原始內容建立文檔,對文檔完成索引構建等;
搜索組件:
程序的組成部分,主要提供用戶界面(UI)好比 Elasticsearch;node
域索引選項:(索引選項用於經過倒排索引來控制文本是否可被搜索,如何被索引)
Index:ANYLYZED:
分析(切詞)並單獨做爲索引項;
Index.Not_ANYLYZED:
不分析(不切詞),把整個文檔當一個索引項;
Index.ANYLYZED_NORMS:
相似於Index:ANALYZED,但不存儲token的Norms(加權基準)信息;
Index.Not_ANYLYZED_NORMS:
相似於Index.Not_ANYLYZED,但不存儲值的Norms(加權基準)信息;
Index.No:
不對此域的值進行索引,所以不能被搜索;
域存儲選項:(是否須要存儲域的真實值,如何被存儲)
store.YES:存儲真實值,佔用存儲空間並返回真實值;
store.NO:不存儲真實值,不佔用存儲空間;
域向量選項:
域向量選項用於在搜索期間該文檔全部的惟一項都能徹底從文檔中檢索時使用;
文檔和域的加權操做:
搜索時若有多個文檔都出現了某個詞,咱們認爲即哪一個文檔權值更高哪一個就排在前面,默認都無加權值;git
索引(index):文檔容器可理解爲索引是具備相似屬性的文檔集合,相似表且索引名須爲小寫字母;
類型(type):類型是索引內部的邏輯分區,其意義徹底取決於用戶需求,一個索引內部可定義一個或多個類型,類型就是其擁有相同的域的文檔的預約義,建議一個索引只存一類數據;
文檔(document):文檔是lucene索引的搜索原子單位,它包含了一個或多個域。是域的容器;
每一個域的組成部分:一個名字,一個或多個值。擁有多個值的域,一般稱爲‘多值域’;
映射(mapping):原始內容存儲爲文檔須要事先分析(如何切詞,哪些能夠過濾等)分析完後要定義這個分析,定義這個分析後讓它怎麼去根據這個定義去搜索實現,這個過程就叫映射;
例如:切詞、過濾掉某些詞等。除此以外ES還爲映射提供了諸如將域中的內容排序等功能;github
Cluster:
ES的集羣標識爲集羣名稱,默認爲elasticsearch。節點就是靠此名字來決定加入到哪一個集羣中。
一個節點只能屬於一個集羣;
Node:
運行了單個ES實例的主機即爲節點。用於存儲數據、參與集羣索引及搜索操做,節點的標識靠‘節點名’;
Shard:
將索引切割成爲的物理存儲組件,但每一個shard都是一個獨立且完整的索引;建立索引時ES默認將每一個索引分割爲5個shard,用戶可自定義,不可更改;
shard兩個類型:
primary shard和replica(副本),每一個主shard都應該有一個副本shard,副本用於數據冗餘及查詢時的負載均衡,用戶可自定義副本動態建立多個replica;redis
~]# yum install -y java-1.8.0-openjdk ~]# wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.2.noarch.rpm ~]# yum install -y elasticsearch-1.7.2.noarch.rpm
~]# cp /etc/elasticsearch/elasticsearch.yml{,.bak} ~]# vim /etc/elasticsearch/elasticsearch.yml
~]# systemctl daemon-reload ~]# systemctl enable elasticsearch.service ~]# systemctl start elasticsearch.service ~]# systemctl status elasticsearch.service 按照以上方法依次啓動其它兩個節點,便可構成ES集羣(三個節點構成ES的集羣) 可抓包看報文傳輸狀態 tcpdump -i ens33 -nn -p tcp port 9300 瀏覽器訪問 http://172.10.10.103:9200/
監聽於 9200/tcp,使用curl命令進行交互,全部的api訪問都是以'下劃線訪問'
curl -X<verb> '<protocol>://host:port/<path>?<query_string>' -d '<body>'
verb:http協議的請求方法 get,put,delete...
protocol:http協議 http,https
query_string:查詢的字符串,例如:?pretty表示用易讀的JSON格式輸出
body:請求的主體信息算法
~]# curl -X get 'http://localhost:9200/?preey' { "status" : 200, "name" : "node3", "cluster_name" : "myes", "version" : { "number" : "1.7.2", "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec", "build_timestamp" : "2015-09-14T09:49:53Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
~]# curl -X get 'http://localhost:9200/_cat/nodes?v' host ip heap.percent ram.percent load node.role master name localhost.localdomain 127.0.0.1 4 36 0.10 d * node3 host:表示主機名 ip:表示主機ip heap.percent:堆內存佔用內存量 ram.percent:ram內存使用量 load:平均負載 node.role:節點的角色(d表示數據節點) master:*號表示主節點 name:表示節點名稱
Cluster API數據庫
health(集羣健康狀態)
curl -X get 'http://localhost:9200/_cluster/health/?pretty' 查看集羣健康狀態
curl -X get 'http://localhost:9200/_cluster/health/test1,test2' 顯示索引狀態
curl -X get 'http://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=50s&pretty' 指定顯示vim
curl -XPUT localhost:9200/_cluster/settings -d ' {...}
插件可擴展ES功能,而且用戶可根據本身須要開發擴展功能,好比可添加自定義的映射類型、自定義分析器、本地腳本、自定義發現方式等;windows
http://localhost:9200/_plugin/marvel curl -x get 'http://localhost:9200/_cat/indicies'
針對數據庫的增、刪、改、查、操做 官方文檔路徑 Document APIs
curl -XPUT 'http://172.10.10.101:9200/students/class1/1?pretty' -d ' { "first_name": "Jing", "last_name": "Guo", "gender": "Male", "age": 24, }' 獲取文檔的時候,直接給出文檔而非關鍵字 curl -XGET 'http://172.10.10.101:9200/students/class1/1?pretty'
[root@es_node1 ~]# curl -XPOST 'localhost:9200/students/class1/1/_update?pretty' -d ' { "doc": { "age": 23 } }' curl -XGET 'localhost:9200/students/class1/1?pretty'
Query Domain Search Language JSON based language for building complex queries
用於實現諸多類型的查詢操做如:simple term query,phrase,range boolean,fuzzy......
/_search:全部索引查詢 /INDEX_NAME/_search 單索引查詢 /INDEX1,INDEX2/_search 多索引查詢 /s*,t*/_search: /students/class1/_search 單類型 /students/class1,class2/_search 多類型
Mapping和Analysis(映射與分析)
ES對每個文檔會取得其全部域的全部值,生成一個名爲"_all"的域。若是在query_string未指定查詢的域時則在_all域上執行查詢操做;
內容和知識點太多,不廢話直接給出官方站點地址 Query DSL
Elasticsearch提供了一個基於JSON的完整Query DSL來定義查詢 (Query dsl,Filter dsl)
Query DSL 在執行full-text查詢時,基於相關度來評判其匹配結果,查詢執行過程複雜且結果不緩存
Filter DSL 在執行exact查詢時,基於其結果爲yes或no進行評判。速度快,且結果緩存
L:logstash
(日誌收集工具)可實現向產生日誌的服務器上部署一個agent收集日誌並經過一個統一管道給集中存儲在elasticsearch組件中;
K:kibina
(nodejs開發)很是美觀的搜索界面,可以把用戶搜索的語句發送給elasticsearch由elasticsearch完成搜索而且把結果返回;
es+logstash+kibina同屬一個組織elastic
Logstash介紹(JRuby研發 JVM)
Logstash 安裝
input {...},filter {...},output {...},codec {...}
Kibina安裝