针对用户请求的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安装