elastic

ELASTICSEARCH

lib:elastic所依赖的java包
data: 默认的数据存放目录,包括节点,分片,索引,文档等数据,生产环境必须要求修改
logs:默认存放日志文件,
启动单节点服务
命令行:
windows: cd elasticsearch\bin.\elastic -d
linux: cd elasticsearch/bin./elastic -d
shell:
windows: start elasticsearch\bin\elasticsearch.bat
linux:
启动kibana
windows: cd kibana\bin.\kibana.bat
linux: cd kibana/bin./kibana

elastic集群的三种健康值状态:
GREEN: 所有Primary(主分片)和Replica均为active,集群健康
YELLOW: 至少有一个Replica不可用,但是所有Primary为active,数据仍然可以保持一致
Red: 至少有一个Primary不可用,数据不完整,集群不可用
健康值检查:
_cat/health?v
_cluster/health
迁移中的分片:。新增加一个节点,就会出现把已经有的数据,迁移到新增加的节点,将数据均匀的放在每一个节点,做到分片均衡,达到更高的性能

搜索引擎
全文搜索引擎:谷歌,百度,搜狗
垂直搜索引擎:有明确的搜索目的
elastic 聚合分析,大数据存储
搜索引擎具备的要求:
查询速度快: 高效的压缩算法 编码和解码的速度快
结果准确;BM25 TF-IDF
检索结果丰富
面对海量数据,如何达到"搜索引擎"级别的查询效率
索引:
帮助快速检索
以数据结构为载体
以文件的形式落地
为什么不适用b+数
1.索引往往字段很长,使用b+,数可能会很深,IO很可怕
2.索引可能失效
3.精准度很差

luncene 全文检索索引
索引系统通过扫描文章中的每一个词,对其进行创建索引,指名文章中的次数和位置,当用户查询的时候,索引系统会根据事先分建立的索引纪念性查找,并将查找的结果反馈给用户的检索方式

倒排索引:
term index(词项索引): 以不同的后缀名命名
trem dictonary(词项索引): 以不同的后缀名命名
posting list(倒排表) : 以不同的后缀名命名,list数组,存储的是id,1,2,3,4,5,6,7
倒排表的压缩算法:
FOR算法
int 4byte = 32 bit 1 bit 0-1 一个字节8个bi
1,2,3,4,5,5,5 posting list 我们不存储他的list数组,而是存储他的差值,把他的差值存储到一个数组,可以压缩很多空间
posting list 可以存储有规律的差值,也可以存储没有规律的差值,对没有规律的差值可以分开存储
int 类型的数据 = 2的几次方个字节
RBM压缩算法
不适合稀疏算法
通过数据 65536 取模,获取一个得数,获取一个余数(0,1000),(0,232),(3,2343)

FST在lucene的实现原理
NODE : 两种节点 unCompliedNode 待处理的节点
CompiledNode 存储的二进制数组,将不需要的数据转换成二进制以FST数据机构存储起来

TERM INDEX ,TERM Dictionary

一个index索引下的多数据存储到Block区域中
Block区域结构:
Block Header : 当前NODE中的个数
Suffix: suffixLength : term后缀的个数 SUffixValue: term后缀值
stats: 当前term在所有文档中字段出现的个数
Metadatas:存储的其他位置

分布式的搜索,存储和分析引擎
elastic 的启动,elastic.bat启动
配置文件:elasticsearch.yaml 里面是elasticsearch 的相关配置信息,有elacticsearch的节点信息 data, log这个两个文件夹配置在别的目录,防止上新版本的时候被覆盖掉
节点:每一个节点就是一个elasticsearch的实例
master: 五角星:候选节点,当主节点宕机时,可以有一个候选节点备用
data:数据节点
data_hot:热节点
data_warm:索引不定期更新,仍可检查
ingest:预处理节点
ml:机器学习节点
分片: 一个索引包含一个或多个分片,一个分片只能有一个主分片一个副分片,主分片的数量一旦确定,不能修改
每个doc不能同时存储在多个主分片中
索引-index 文档-Document

基于resultful 的CRUD

创建索引:PUT /索引名称?pretty
查询索引: GET _cat/indices
删除索引: DELETE /索引名称?pretty
插入数据:
PUT /索引名称/
put 修改数据是全量替换
post 可修改指定字段更新
Mapping映射
概念:定义文档及其包含的字段存储和索引方式的过程
两种映射方式:
dynamic mapping(动态映射或自动映射)
expllcit mapping(静态映射或手工映射)–新将结构及类型创建好
put /索引/_mapping
{
”properties":{
“date”:{
“type”:“text”
}
}
}
Mapping参数
Mapping:包含字段名称,类型,字段使用的分词器,是否评分,是否创建索引等属性
查看Mapping GET /索引/_Mapping
Mapping数据类型:
Long Integer short byte double float keywords
keyWords :
keyword : 用于索引结构化的字段,用来过滤,排序,集合。keyword只能用来通过精确值找到,id应该用于keyword
XXX:{
“type”:”",
“fields”:{
“keyword”{
“type”:“keyword”,
“ignore_above”:256–当字段比较长,只保证256个字符,其他的都丢弃
}
}
}
dates:date类型
text:当一个字段被全文搜索,比如产品描述,设置text类型之后,字段内容会被分析,在生成倒排索前,字符串会被分析器分成一个个词项。text不用于排序,很少用于集合
映射参数:
index:是否对创建当前字段创建索引,默认为true
analyzer:指定分词器
boost:对当前字段相关度的评分权重,默认为1
enable:是否创建索引,全局
搜索和查询
es查询上下文
took:查询时间
time_out:是否超时
max_score:最大评分
hits:查询结果
_index:索引
_type: 类型
_id:当前数据的id
_source:元数据(禁用_sourcr: 节省存储内存。坏处:不支持查询,不支持高亮)
_score:相对评分

DSL语法:
–查询当前索引下的全部:
post 索引/_search
{
“query”:{
“mactch_all”
}
}
–多个匹配
post 索引/_search
{
“query”:{
“multi_mactch”:{
“query”:“值”,
“fields”:[“字段名称1”,“字段名称2”]
}
}
}
–当前值匹配
post 索引/_search
{
“query”:{
“mactch_phrase”:{
“query”:“值”
}
}
}

term 查询
不进行分词,和要查询的字段值和es中包含关系,包含每一个字段,且不分词,词项顺序不能颠倒
post 索引名称/_search{
“query”:{
“term”:{
“name”:“”
}
}
}

trerms 匹配查询:
post 索引名称/_search{
“query”:{
“terms”:{
“name”:[“”,“”]
}
}
}

range: 范围查询
post 索引名称/_search{
“query”:{
“range”:{
“name”:{
“大于”:“”,
“小于”:“”
}
}
}
}
过滤器:filter:筛选数据
组合查询-BOOL query
bool:可以组合多个查询条件,满足must和should 子句的文档将会合并起来计算分值
must:必须满足子句必须出现在匹配的文档中,并有助于得分
filter:过滤器,不计算相关度分数
should:可能满足部分子句出现在匹配的文档中
bool query
post 索引名称/_search{
“query”:{
“bool”:{
“terms”:{
“must”:[{
“match”:{
"name:“xx yy”
},
“match”:{
"name:“zz cc”
}
}]
}
}
}
}

分词器:
规范化: normalization: 大小写转换,统一规范化
字符过滤器:character filter:分词之前,过滤一些无用的字符
分词器:tokenizer
令牌过滤器:token filter
常用分词器 中文分词器 自定义分词器 热更新分词器

term 查询
不进行分词,和要查询的字段值和es中包含关系,包含每一个字段,且不分词,词项顺序不能颠倒
post 索引名称/_search{
“query”:{
“term”:{
“name”:“”
}
}
}

trerms 匹配查询:
post 索引名称/_search{
“query”:{
“terms”:{
“name”:[“”,“”]
}
}
}

range: 范围查询
post 索引名称/_search{
“query”:{
“range”:{
“name”:{
“大于”:“”,
“小于”:“”
}
}
}
}
过滤器:filter:筛选数据
组合查询-BOOL query
bool:可以组合多个查询条件,满足must和should 子句的文档将会合并起来计算分值
must:必须满足子句必须出现在匹配的文档中,并有助于得分
filter:过滤器,不计算相关度分数
should:可能满足部分子句出现在匹配的文档中
bool query
post 索引名称/_search{
“query”:{
“bool”:{
“terms”:{
“must”:[{
“match”:{
"name:“xx yy”
},
“match”:{
"name:“zz cc”
}
}]
}
}
}
}

分词器:
规范化: normalization: 大小写转换,统一规范化
字符过滤器:character filter:分词之前,过滤一些无用的字符
分词器:tokenizer
令牌过滤器:token filter
常用分词器 中文分词器 自定义分词器 热更新分词器

中文分词器
term 查询
不进行分词,和要查询的字段值和es中包含关系,包含每一个字段,且不分词,词项顺序不能颠倒
post 索引名称/_search{
“query”:{
“term”:{
“name”:“”
}
}
}

trerms 匹配查询:
post 索引名称/_search{
“query”:{
“terms”:{
“name”:[“”,“”]
}
}
}

range: 范围查询
post 索引名称/_search{
“query”:{
“range”:{
“name”:{
“大于”:“”,
“小于”:“”
}
}
}
}
过滤器:filter:筛选数据
组合查询-BOOL query
bool:可以组合多个查询条件,满足must和should 子句的文档将会合并起来计算分值
must:必须满足子句必须出现在匹配的文档中,并有助于得分
filter:过滤器,不计算相关度分数
should:可能满足部分子句出现在匹配的文档中
bool query
post 索引名称/_search{
“query”:{
“bool”:{
“terms”:{
“must”:[{
“match”:{
"name:“xx yy”
},
“match”:{
"name:“zz cc”
}
}]
}
}
}
}

分词器:
规范化: normalization: 大小写转换,统一规范化
字符过滤器:character filter:分词之前,过滤一些无用的字符
分词器:tokenizer
令牌过滤器:token filter
常用分词器 中文分词器 自定义分词器 热更新分词器

中文分词器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值