批量建索引:

curl -s -XPOST 'localhost:9200/_bulk' --data-binary @documents.json

查看索引mapping
myindex/_mapping

分页:

from、size

返回版本:

"version": true

利用得分限制结果集:

"min_score": 0.75

"fields":*  返回所有字段

_source字段:

请求一个没有存储的字段时,这个字段将从_source字段中提取(需要额外处理);返回_source字段比返回多个存储字段性能更好

部分字段:(排除字段)

"partial_fields": { "partial1": { "include": ['titl*'], "exclude": ["chara*"] }}

脚本字段:

{"scirpt_fields": {"correctYear": {"script": "doc['year'].value - 1800" }}}   或   "script": "_source.year - 1800"  (更省内存,支持更复杂字段值)

传参数给脚本:"params": {"paramYear": 1800}   然后"script": "_source.year - paramYear" }

搜索执行偏好:(控制在哪些分片上执行查询,如:_primary、_primary_first、_shards)

curl -XGET 'localhost:9200/library/_search?preference=_local' -d json

搜索分片API:(此API允许检查将执行查询的分片)

curl -XGET 'localhost:9200/library/_search_shards?pretty' -d json

加权查询:

"title": {"value": "crime", "boost": 10.0}

多词条查询:

"terms": {"title": ['book', 'novel'], "minimum_match": 1

term查询不分析,match查询分析,

multi_search查询:(多个字段上查询)

query_string查询

simple_query_string: "simple_query_string": {"query": "title: crime^10 +title:punishment -otitle:cat"}

标识符查询(ids,此查询针对内部的_uid字段运行,不需要启用_id字段)、前缀查询(prefix)

fuzzy查询(fuzzy)

通配符查询(wildcard,允许使用*和?等通配符,性能不好,尽量避免前缀通配符): "wildcard": {"title": "cr?me"}

范围查询(range, 同时支持数值型和字符串,范围查询只能针对单个字段)

最大分查询

_all域(默认启用)

ElasticSearch默认为每个被索引的文档都定义了一个特殊的域 - '_all',它自动包含被索引文档中一个或者多个域中的内容, 在进行搜索时,如果不指明要搜索的文档的域,ElasticSearch则会去搜索_all域。_all带来搜索方便,其代价是增加了系统在索引阶段对CPU和存储空间资源的开销。
默认情况,ElasticSarch自动使用_all所有的文档的域都会被加到_all中进行索引。可以使用"_all" : {"enabled":false} 开关禁用它。如果某个域不希望被加到_all中,可以使用 "include_in_all":false。例如:

{
"person": {
"_all": {
"enabled": true
}"properties": {
"name": {
"type": "object",
"dynamic": false,
"properties": {
"first": {
"type": "string",
"store": true,
"include_in_all": false
},
"last": {
"type": "string",
"index": "not_analyzed"
}
}
},
"simple2": {
"type": "long",
"include_in_all": false
}
}
}
}

查询时,_all和其它域一样使用:

GET/profiles/_search
{
"query": {
"match": {
"_all": "food"
}
}
}

或者在不提供搜索域的情况下,默认会搜索_all,例如:

GET/profiles/_search
{
"query": {
"query_string": {
"query": "food"
}
}
}

索引段信息

http://10.17.139.21:9200/_segments GET

  • num_committed_segments"
  • "num_search_segments"

每个shard都有以上两个段信息参数,段文件太多会影响ES检索性能

另外一种查询index段信息的方式:_plugin/head/ -> index信息 ->索引状态  -> segments

聚合

_search?search_type=count POST
如果不需要搜索到的文档,用search_type=count参数更好,会省掉一些不必要的工作,更高效

{
"aggs": {
"rowKeyAggs": {
"stats": {
"field": "target_type"
}
},
"other": {
"terms": {
"field": "task_id"
}
}
}
}

获取最小值

{
"aggs": {
"minAggs": {
"min": {
"field": "age"
}
}
}
}

使用脚本

1.

{
"aggs": {
"minAggs": {
"min": {
"field": "target_type",
"script": "_value - 10000"
}
}
}
}

2.

{
"aggs": {
"minAggs": {
"min": {
"script": "doc['sex'].value - 10000"
}
}
}
}

3.

{
"aggs": {
"minAggs": {
"min": {
"field": "target_type",
"script": "_value - mod",
"params": {
"mod": 1000
}
}
}
}
}

 value_count聚合(数值型和非数值型均适用)

{
"aggs": {
"minAggs": {
"value_count": {
"field": "name"
}
}
}
}

桶聚合

#不同类型车牌数量统计,按数量排序

{
"aggs": {
"carTypeAggs": {
"terms": {
"field": "plate_type" #定义一个terms类型的桶
}
}
}
}

terms桶会动态地为每一个它遇到的不重复的词条创建一个新的桶。因为我们针对的是color字段,那么terms桶会动态地为每种颜色创建一个新桶。

取得某个索引/类型下某个字段中出现不同值的个数

{
"aggs": {
"carTypeAggs": {
"cardinality": {
"field": "plate_type"
}
}
}
}

桶中的桶

{
"aggs": {
"carTypeAggs": {
"terms": {
"field": "plate_type"
},
"aggs": {
"avg_vehicle_speed": {
"avg": {
"field": "vehicle_speed"
}
},
"brandC": {
"terms": {
"field": "brand"
}
}
}
}
}
}

ES插件安装:

cd C:\elasticsearch-0.90.3\bin
plugin -install mobz/elasticsearch-head
离线安装
plugin -install file://usr/file.zip

ES断路器和路由

字段数据缓存(fielddata)及配置参数

Fielddata缓存是ES缓存的一部分,当查询对字段进行排序或切面计算时,ES将该字段或doc的所有倒排索引加载到内存,以便能快速访问这些字段或doc。
Index.fielddata.cache.type:该属性控制字段数据缓存的级别,属性值为resident或soft时为索引级别,但是并不建议使用索引级别,因为很难预测索引会分配到哪个节点上,无法预估每个节点上字段数据缓存的大小,可能会导致内存使用问题。属性值为node(默认值)时为节点级别,节点级别的配置包括indices.fielddata.cache.size和indices.fielddata.cache.expire。
indices.fielddata.cache.size:该属性来控制允许用于字段缓存的内存大小。可以设置成绝对值(如4GB)或百分比(如40%)。如果使用百分数,ES会按当前节点的最大堆内存的百分比计算内存使用量,而不是按可用堆内存。有了这个设置,最久未使用的fielddata会被回收,为新数据腾出空间。这个参数的配置是没有限制的,应该小心使用,默认是unbounded,ES永远不会回收fielddata缓存。
indices.fielddata.cache.expire:该属性控制字段数据缓存的过期时间,默认为-1,表示永不过期。但是一般情况下强烈不建议设置过期时间,因为重建字段数据缓存的代价是昂贵的。后期版本可能会废弃这个参数。

监控Fielddata缓存

Fielddata 的使用可以被监控:
按索引级别使用:
GET /_stats/fielddata?fields=* 
按节点级别使用:
GET /_nodes/stats/indices/fielddata?fields=*
按索引节点级别使用:
GET /_nodes/stats/indices/fielddata?level=indices&fields=* 
使用设置 ?fields=* ,可以将内存使用分配到每个字段。

断路器(fielddata circuit breaker)

如果一个查询要加载的fielddata超过可用堆内存的大小,就会导致OOM,因此ES设计了断路器,断路器的工作机制是预估一个查询所需要的内存大小,如果超过可用堆内存,就会终止查询并抛出Data too large Exception。这比OOM的代价要小。断路器的配置如下:
indices.breaker.fielddata.limit
fielddata 断路器默认设置堆的 60% 作为 fielddata 大小的上限。
indices.breaker.request.limit
request 断路器估算需要完成其他请求部分的结构大小,例如创建一个聚合桶,默认限制是堆内存的 40%。
indices.breaker.total.limit
total 揉合 request 和 fielddata 断路器保证两者组合起来不会使用超过堆内存的 70%。 
这两个配置是全局的,配置在config/elasticsearch.yml ,也可以通过REST更新一个集群:
PUT /_cluster/settings
{
"persistent" : {
"indices.breaker.fielddata.limit" : "40%" 
}
}
在实际使用过程中,Fielddata中的indices.fielddata.cache.size属性经常和断路器的indices.breaker.fielddata.limit属性配合使用,为了让fielddata数据更新正常进行,一般断路器的限制要比缓存大一些。

路由器

默认情况下,ES会在所有的索引分片中均匀的分配文档,查询文档时,需要查询所有分片并合并结果。
路由是可以控制文档分配和查询的目的分片,在创建索引的时候可以指定一个路由值,查询的时候可以通过这个路由值就可以指向对应的分片,相同查询的路由路径是相同的,1.x版本的ES可以将文档中的某个字段作为路由值,自2.0版本之后只能手动指定。路由确保了在索引时拥有相同路由值的文档会索引到相同的分片上,但一个给定的分片上可以有不同路由值的文档。

ES通过路由值锁定目标分片的公式:shard = hash(routing) % number_of_primary_shards。
通过路由值和索引名、索引类型的组合可以查询对应的节点,对应的API是searchshard API。
代码如下:
ClusterSearchShardsResponse response = esClient.admin().cluster().prepareSearchShards().setIndices(indices).setTypes(indexType).setRouting(routNum).execute().actionGet();

相关链接:

聚合:http://blog.csdn.net/dm_vincent/article/details/42407823

脑裂:http://www.cnblogs.com/chenying99/p/4350930.html

Elasticsearch学习笔记(一)的更多相关文章

  1. Elasticsearch学习笔记一

    Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...

  2. elasticsearch学习笔记——相关插件和使用场景

    logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...

  3. ElasticSearch学习笔记(超详细)

    文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...

  4. 【原】无脑操作:ElasticSearch学习笔记(01)

    开篇来自于经典的“保安的哲学三问”(你是谁,在哪儿,要干嘛) 问题一.ElasticSearch是什么?有什么用处? 答:截至2018年12月28日,从ElasticSearch官网(https:// ...

  5. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  6. Elasticsearch学习笔记

    Why Elasticsearch? 由于需要提升项目的搜索质量,最近研究了一下Elasticsearch,一款非常优秀的分布式搜索程序.最开始的一些笔记放到github,这里只是归纳总结一下. 首先 ...

  7. Elasticsearch学习笔记 一

    本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws. 本文参考和学习资料 <ES权威指南> 一.基本概念 存储数据到ES中的行为叫做 ...

  8. 2018/2/13 ElasticSearch学习笔记三 自动映射以及创建自动映射模版,ElasticSearch聚合查询

    终于把这些命令全敲了一遍,话说ELK技术栈L和K我今天花了一下午全部搞定,学完后还都是花式玩那种...E却学了四天(当然主要是因为之前上班一直没时间学,还有安装服务时出现的各种error真是让我扎心了 ...

  9. 2018/2/11 ELK技术栈之ElasticSearch学习笔记二

    终于有时间记录一下最近学习的知识了,其实除了写下的这些还有很多很多,但懒得一一写下了: ElasticSearch添加修改删除原理:ElasticSearch的倒排索引和文档一旦生成就不允许修改(其实 ...

  10. elasticsearch学习笔记——安装,初步使用

    前言 久仰elasticsearch大名,近年来,fackbook,baidu等大型网站的搜索功能均开始采用elasticsearch,足见其在处理大数据和高并发搜索中的卓越性能.不少其他网站也开始将 ...

随机推荐

  1. Codeforces 682C Alyona and the Tree(树形DP)

    题目大概说给一棵点有权.边也有权的树.一个结点v不高兴当且仅当存在一个其子树上的结点u,使得v到u路径上的边权和大于u的权值.现在要不断地删除叶子结点使得所有结点都高兴,问最少删几个叶子结点. 一开始 ...

  2. 每天一个linux命令---curl

    linux curl是一个利用URL规则在命令行下工作的文件传输工具.详细请参考:http://www.codesky.net/article/201010/170043.html 例如:curl ' ...

  3. awk 学习

    1. awk用例 今天用awk来统计一个字符出现的次数,总是比实际多一个.查了半天才发现问题所在. 文本tt.txt如下: <lst name="responseHeader" ...

  4. 深入理解Java:注解(Annotation)基本概念

    转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...

  5. 洛谷 P1030 求先序排列 Label:None

    题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入输出格式 输入格式: 2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序 ...

  6. Jquery表格变色 复选框全选,反选

    /*jquery静态表格变色*/ $(".tr2").mouseover(function(){ $(this).css("background"," ...

  7. 【BZOJ2456】mode 神奇的卡内存题

    以后把题解放在前面,估计没人看题解先看题... 内存1M,4个int(其实对内存的概念十分模糊),众数即为出现次数最多的数,可以用抵消的思想(但是众数不是可以是一大坨么...) #include &l ...

  8. HDU 1710 二叉树遍历,输入前、中序求后序

    1.HDU  1710  Binary Tree Traversals 2.链接:http://acm.hust.edu.cn/vjudge/problem/33792 3.总结:记录下根结点,再拆分 ...

  9. POJ 1260 Pearls 简单dp

    1.POJ 1260 2.链接:http://poj.org/problem?id=1260 3.总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/a ...

  10. GO语言练习:构建json 和 解析JSON 实例

    本文介绍如何使用Go语言自带的库把对象转换为JSON格式,并在channel中进行传输后,并把JSON格式的信息转换回对象. 1.Go语言的JSON 库 Go语言自带的JSON转换库为 encodin ...