ElasticSearch基础

一个基于Lucene的搜索服务器。提供了一个分布式多用户能力的全文搜索引擎,基于RESTful接口。

它使用Java开发的。Apache开源的企业级搜索引擎。

 

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

  • 实时分析的分布式搜索引擎。

  • 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

 

关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns) 

Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)

  • 分片的特点

    • Elasticsearch 是利用分片将数据分发到集群内各处
    • 分片是数据的容器,文档保存在分片内
    • 分片又被分配到集群内的各个节点里
    • 当集群规模变动,ES会自动在各个节点中迁移分片。使得数据任然均匀分布在集群中
    • 副分片是主分片的一个拷贝,作为硬件故障时的备份。并提供返回文档读操作
    • 在创建索引时,确定主分片数,但是副分片可以在后面进行更改

查询分页不宜过大,页数不宜过深。

  • 引擎单次搜索默认不能超过1W条数据,建议查询单页大小在10-50条。

单次插入的数据控制在500KB以内,不要超过1M。

  • ES的插入效率较低,特别是GEO坐标点的数据,若单次批量插入数据过大,可能导致服务调用超时。

使用正确的数据类型

  • 对integer类型的字段做过滤条件时,使用integer类型的值查询,其他同理。

避免从ES批量导数据的行为

  • 批量时深度分页和滚动查询效率低,影响搜索服务性能。

避免文档稀疏

  • 文档稀疏是指多个文档间间距过大。定义好mapping后,所有的文档尽量包含全部字段,如果有的文档包含,有的文档不包含,则文档是稀疏的。

ES作为搜索工具,全量数据一定要有备份,关系型数据库或其他。

 

ES中的基本数据类型有

  • 字符串 string

  • 数字类型 long integer double 等

  • 日期 date

  • 布尔类型 boolean

  • 二进制 binary

  • 复杂的数据类型

    • 数组类型

    • 对象类型

    • 嵌套类型 netsted

    • 地理数据类型

    • 专门数据类型

      •     ipv4

      •     完成数据类型

      •     单词计数类型

 

注意:elasticsearch 的querystring源自Lucene的Query语法

 

下面列举常见的querystring用法(注意一下demo,多个field条件尽量用空格分开;AND OR TO等 使用大写;冒号可以用等号代替):

1.

sql: age = 20 and id = 10001

querystring: "+age:20 +id:10001" 或 "age:20 AND id:10001" 

 

2.

sql: age = 20 or id = 10001

querystring: "age:20  id:10001" 或 "age:20 OR id:10001"

 

3.

sql:  age = 20 and id != 10001

querystring: "+age:20 -id:10001"

(+代表and ;  - 代表!= ;没有运算符的表示or,但至少有一个命中)

 

4 .

sql: age in (1,2,3)  

querystring: "age:(1 OR 2 OR 3)" 或 "age:1 OR age:2 OR age:3"

 

5.

sql age in (20,22) and age in (30,32)

querystring: "age:(( 20 OR 22) AND (30 OR 32) )"

 

6.

分词查询(例如查询字段describe包含“测试”的)

querystring:"describe:测试"

通配符查询(例如查询字段describe以“测试”开头的)

querystring:"describe:测试*"

 

7

判断字段存在/不存在

存在photo字段的记录: "_exists_:photo"    

不存在photo字段的记录:"_missing_:photo"    

 

8.

sql: createtime between 2017-01-05 and 2017-10-31

querystring:"createtime:[2017-01-05 TO 2017-10-31]"

 

9.

sql: count > 10 and count < 20  

querystring: "count:{1 TO 5}  或者: count:>10 OR count:<20"

10.

sql: count >= 10 and count <= 20  

querystring: "count:[1 TO 5]  或者:count:>=10 OR count:<=20"

(上面是范围查询,[]中括号代表包含 ,{}代表不包含)

11.

权重分配,假设查询title 或content包含"如何操作",但是title命中的排序在content命中之前,title的优先级高于content。

querystring:"question:如何操作^2 answer:如何操作^1"      ^运算符后面的数字代表权重,大于1评分会比原有的高(乘法运算)。尽量设置1-10左右,因为评分的影响因素较多,因此若效果不明显需要多次调试。

 

还有诸多复杂的查询语法(如正则表达式,属性通配符等等)在这里不作列举,必要时可查看Lucene的query语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值