目录
1、路由文档到分片
当你索引一个文档,它被存储在单独一个主分片上。Elasticsearch 是如何指定文档属于哪个分片的呢?
它根据一个简单的算法决定:
shard = hash(routing) % number_of_primary_shards
routing 值是一个任意字符串,它默认是 ID,但也可以自定义。根据以上算法分片范围永远在 0 到 number_of_primary_shards - 1,这个数字就是特定文档所在的分配。
这也解释了为什么主分片的数量只能在创建索引时定义且不能修改。
2、搜索
为了充分挖掘Elasticsearch的潜力,你需要理解以下三个概念:
概念 | 解释 |
---|---|
映射(Mapping) | 数据在每个字段中的解释说明 |
分析(Analysis) | 全文是如何处理的可以被搜索的 |
领域特定语言查询(Query DSL) | Elasticsearch使用的灵活的、强大的查询语言 |
3、空搜索
curl -XGET 'http://10.24.54.241:9200/_search/?pretty'
没有指定任何的查询条件,只返回集群索引中的所有文档。
指定条件
/_search
在所有索引的所有类型中搜索
/gb/_search
在索引gb
的所有类型中搜索
/gb,us/_search
在索引gb
和us
的所有类型中搜索
/g*,u*/_search
在以g
或u
开头的索引的所有类型中搜索
/gb/user/_search
在索引gb
的类型user
中搜索
/gb,us/user,tweet/_search
在索引gb
和us
的类型为user
和tweet
中搜索
/_all/user,tweet/_search
在所有索引的user
和tweet
中搜索 search types user
and tweet
in all indices
分页
Elasticsearch接受from
和size
参数:
size
: 结果数,默认10
from
: 跳过开始的结果数,默认0
如果你想每页显示5个结果,页码从1到3,那请求如下:
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
也可以用 scroll、scan方式实现分页,后续再说。