标签:ocs restful 两种 文档 mon 重点 pac udp协议 ppi
开始请大家想一个问题,如何统计一个Web站点的有效PV?针对用户请求的URL,统计时做模式匹配-------->即用户真正去打开一个站点的有效页面并对每个页面的入口的访问做一个统计浏览量;
简要搜索引擎
搜索引擎在互联网上特别多有专业(Startpage,Google,Yahoo,Baidu)等也有非专业开源(北大搜索、任何基于Lucene库的二次开发搜索代理引擎)等;
其重点都是用来做海量数据搜索存储、分析,并且根据用户指定的filter来过滤出用户所需要的数据。而背后所需基础组件无外乎是 索引链、搜索组件;
索引链:
能够把数据收集进来,存储下来并为其构建一个索引,即把数据收集起来构建索引;
索引链实现独立步骤:检索原始内容,根据原始内容创建文档,对文档完成索引构建等;
搜索组件:
程序的组成部分,主要提供用户界面(UI)比如 Elasticsearch;
域索引选项:索引选项用于通过倒排索引来控制文本是否可被搜索,如何被索引;
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:不存储真实值,不占用存储空间;
域向量选项:
域向量选项用于在搜索期间该文档所有的唯一项都能完全从文档中检索时使用;
文档和域的加权操作:
搜索时如有多个文档都出现了某个词,我们认为即哪个文档权值更高哪个就排在前面,默认都无加权值;
索引(index):文档容器可理解为索引是具有类似属性的文档集合,类似于表。切记索引名必须为小写字母;
类型(type):类型是索引内部的逻辑分区,其意义完全取决于用户需求,一个索引内部可定义一个或多个类型,类型就是其拥有相同的域的文档的预定义,建议一个索引只存一类数据;
文档(document):文档是lucene索引的搜索原子单位,它包含了一个或多个域。是域的容器;
每个域的组成部分:一个名字,一个或多个值。拥有多个值的域,通常称为‘多值域’;
映射(mapping):原始内容存储为文档需要事先分析(如何切词,哪些可以过滤等)分析完后要定义这个分析,定义这个分析后让它怎么去根据这个定义去搜索实现,这个过程就叫映射;
例如:切词、过滤掉某些词等。除此之外ES还为映射提供了诸如将域中的内容排序等功能;
Cluster:
ES的集群标识为集群名称,默认为elasticsearch。节点就是靠此名字来决定加入到哪个集群中。一个节点只能属于一个集群;
Node:
运行了单个ES实例的主机即为节点。用于存储数据、参与集群索引及搜索操作,节点的标识靠‘节点名’;
Shard:
将索引切割成为的物理存储组件,但每个shard都是一个独立且完整的索引;创建索引时ES默认将每个索引分割为5个shard,用户可自定义,不可更改;
?shard两个类型:
???primary shard和replica(副本),每个主shard都应该有一个副本shard,副本用于数据冗余及查询时的负载均衡,用户可自定义副本动态创建多个replica;
~]# 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‘ 指定显示
curl -XPUT localhost:9200/_cluster/settings -d ‘ {...}
插件可扩展ES功能,并且用户可根据自己需要开发扩展功能,比如可添加自定义的映射类型、自定义分析器、本地脚本、自定义发现方式等;
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安装
标签:ocs restful 两种 文档 mon 重点 pac udp协议 ppi
原文地址:http://blog.51cto.com/51eat/2327295