使用 man ascii 来查看 ASCII 表。

关于copy_to字段

hufuman 回复了问题 • 2 人关注 • 1 个回复 • 3215 次浏览 • 2018-10-30 18:17 • 来自相关话题

ES使用scripts的来过滤数据

LovelyFeng 回复了问题 • 3 人关注 • 2 个回复 • 8341 次浏览 • 2018-10-30 17:36 • 来自相关话题

哈哈哈是有人在正式服测试吗??

medcl 回复了问题 • 4 人关注 • 4 个回复 • 1536 次浏览 • 2018-10-30 11:07 • 来自相关话题

es6.4.2jar包引入问题

rochy 回复了问题 • 2 人关注 • 2 个回复 • 1436 次浏览 • 2018-10-29 21:58 • 来自相关话题

es 与 jackson的问题

rochy 回复了问题 • 2 人关注 • 1 个回复 • 1354 次浏览 • 2018-10-29 21:54 • 来自相关话题

ES 6.3.0 请教下每个shard下存储的文档_id是连续的还是随机的?

匿名用户 回复了问题 • 3 人关注 • 2 个回复 • 1346 次浏览 • 2018-10-29 21:24 • 来自相关话题

搜索素组问题

zxl 回复了问题 • 2 人关注 • 2 个回复 • 741 次浏览 • 2018-10-29 17:27 • 来自相关话题

elasticsearch启动提示elasticsearch.service: main process exited, code=exited, status=64/n/a

回复

xbjccb 回复了问题 • 1 人关注 • 1 个回复 • 10017 次浏览 • 2018-10-29 15:39 • 来自相关话题

ES与Hive与Spark集成的问题

ly898197688 回复了问题 • 2 人关注 • 2 个回复 • 3569 次浏览 • 2018-10-29 13:51 • 来自相关话题

es如何优化一个慢查询

elk123 回复了问题 • 2 人关注 • 1 个回复 • 4308 次浏览 • 2018-10-29 12:46 • 来自相关话题

cluster.routing.allocation.cluster_concurrent_rebalance 问题

luxx 回复了问题 • 3 人关注 • 2 个回复 • 2160 次浏览 • 2018-10-29 10:59 • 来自相关话题

elasticSearch window启动提示不应有\common

jianlam 回复了问题 • 5 人关注 • 4 个回复 • 5225 次浏览 • 2018-10-27 23:57 • 来自相关话题

请问各位 非SSD 批量插入一亿条数据 大概4个G大小的文件 到ES中大概要多久

well 回复了问题 • 9 人关注 • 7 个回复 • 2871 次浏览 • 2018-10-27 19:29 • 来自相关话题

ELK 使用小技巧(第 1 期)

rochy 发表了文章 • 1 个评论 • 8638 次浏览 • 2018-10-27 19:16 • 来自相关话题

ELK Tips 主要介绍一些 ELK 使用过程中的小技巧,内容主要来源为 Elastic 中文社区。

一、Logstash

1、Logstash 字符串分割(Split)

以下配置将 message 内容按照 \t 进行切分,为了使 \t 生效需要将 logstah.yml 中配置项 config.support_escapes 设置为 true,当设置为 true 时,带引号的字符串将处理转义字符,默认值为 false
<br /> filter {<br /> mutate {<br /> split => {"message" => "\t"}<br /> add_field => {<br /> "ftimeold" => "%{[message][0]}"<br /> }<br /> }<br /> }<br />

2、Logstash 按文件读取内容并存储到 ES

下面的配置将读取/home/txts/*下的文件,并读取整个文件内容,然后将文件内容存储到 test-text 索引中,同时该条记录的 _id 为文档的文件名。这里需要注意的是,想读取到文档末尾时,分隔符需设置为 EOF
<br /> input {<br /> file {<br /> path => ["/home/txts/*"]<br /> start_position => "beginning"<br /> mode => "read"<br /> delimiter => "EOF"<br /> file_completed_action => "log"<br /> file_completed_log_path => "/home/logs/file.log"<br /> }<br /> }<br /> output {<br /> elasticsearch {<br /> hosts => ["<a href="http://192.168.3.214:9200/"" rel="nofollow" target="_blank">http://192.168.3.214:9200/&amp;quot;</a>]<br /> index => "test-text"<br /> document_id => "%{path}"<br /> }<br /> stdout {}<br /> }<br />

3、ES Ingest Node 脚本案例

Ingest Node 可以使用多种过滤器对数据进行处理,其中 Script 脚本的功能非常强大,下面的案例实现了将一个 Json 结构进行了 Flat 化:
<br /> {<br /> "script" : {<br /> "lang" : "painless",<br /> "source" : "def dict = ['result': new HashMap()]; for (entry in ctx['json'].entrySet()) { dict['result'][entry.getKey()] = entry.getValue(); } ctx['osquery'] = dict; ctx.remove('json');"<br /> }<br /> }<br />

4、Logstash input file 插件中 sincedb 维护问题

  1. 如果不想保存 sincedb,可以使用下面配置:sincedb_path => "/dev/null"
  2. 如果希望被扫描的记录超过一段时间后自动被清除,可以使用 sincedb_clean_after => "2 weeks" 来实现,sincedb_clean_after 表示当一个文件在设定的时间内没有发生过任何变化,则关于这个文件的扫描记录将不会存储到 sincedb 里面,简单来说就是一条记录的过期时间。



    二、Elasticsearch

    1、ES 查询结果的一致性

    为了保证用户每次查询结果的一致性(文档在结果中的顺序),可以在查询 url 里添加 preference=<some string> 这个参数,其中<some string>可以是用户的 session ID,这样某一个用户查询的时候,查询会被固定在某几个 shard。

    2、同义词的扩展或收缩

    • 简单扩展,把同义词列表中的任意一个词扩展成同义词列表所有的词:jump,hop,leap
    • 简单收缩,把左边的多个同义词映射到了右边的单个词:leap,hop => jump
    • 类型扩展,完全不同于简单收缩或扩张,并不是平等看待所有的同义词,而是扩大了词的意义使被拓展的词更为通用:
      <br /> "cat => cat,pet",<br /> "kitten => kitten,cat,pet",<br /> "dog => dog,pet"<br /> "puppy => puppy,dog,pet"<br />

      3、设置某个索引为只读状态

      index.blocks.write 设置为 true 来禁止对索引的写操作,但索引的 metadatra 可以正常写。
      <br /> PUT indexName/_settings<br /> {<br /> "index.blocks.write": true<br /> }<br />

      4、Failed to process cluster event (put-mapping) within 30s

      这个是创建 mapping 的时候超时了,默认是 30s 应该是集群处理不过来了。索引文件太多,使得集群的状态数据过多过大,在每个小时新建索引和设置索引 mapping 的时候,就产生集群状态更新任务交给 master 处理,master 在变更状态数据的时候是单线程处理的,如果集群总的状态数据很大,master处理这些任务就容易出现超时。

      解决办法:

    • 控制集群的总的索引数量,shard 数量;
    • 如果同时创建的索引非常多,最好避免通过写入数据自动创建索引;
    • 可以通过 cron 任务,预先顺序的创建好索引

      5、Get 查询获取不到数据,但是用 _search 就可以查询到

      这种情况一般在索引时候加入了路由字段(routing),那么在 get,delete,update 操作中都必须使用路由字段。

      <br /> PUT my_index/my_type/1?routing=user1&refresh=true <br /> {<br /> "title": "This is a document"<br /> }<br /> <br /> GET my_index/my_type/1?routing=user1<br />

      6、ES 5.X 版本多个 type 的数据迁移到 6.X

      把 5.x 集群中的索引按不同 type 拆分 reindex 到 6.x 集群索引中,然后将拆分出来的多个索引使用别名进行组织;例如 5.x 集群中有索引 IndexA,该索引上有 typeA 和 typeB,reindex 到 6.x 集群IndexA_TypeAIndexB_TypeB,reindex 语句如下所示:

      <br /> POST _reindex<br /> {<br /> "source": {<br /> "index": "IndexA",<br /> "type": "TypeA",<br /> "size": 10000<br /> },<br /> "dest": {<br /> "index": "IndexA_TypeA"<br /> }<br /> }<br />

      最后给 6.x 集群的IndexA_TypeAIndexB_TypeB添加别名 IndexA,用户查询时使用的索引名称就不用变化。

      <br /> POST _aliases <br /> {<br /> "actions": [<br /> {"add": {"index": "IndexA_TypeA", "alias": "IndexA"}},<br /> {"add": {"index": "IndexA_TypeB", "alias": "IndexA"}}<br /> ]<br /> }<br />

      7、reindex 将多个索引合并成一个索引,需要重新设置新索引的 mapping 吗?

      需要在 reindex 之前为新索引重新设置 mapping ,reindex 只是通过类似 scroll 的方式把数据 bulk 到新的索引,不会自动同步原索引的 mappings 信息。

      8、集群的 discovery.zen.ping.unicast.hosts 配置

      只需要配置主节点(master)地址即可。

      ```
      discovery.zen.ping.unicast.hosts:

    • 192.168.1.10:9300
    • 192.168.1.11
    • seeds.mydomain.com
      ```

      9、ES 的 path.data 配置多个盘的路径,查询效率与单个存储盘的效率比,哪个效率高些?


      想最大程度发挥磁盘读写 io,还是推荐 RAID0。

      使用多路径不一定会提升读写速度,和集群 shard 的数量有关系;主要是因为一个 shard 对应的文件,只会放到其中一块磁盘上,不会跨磁盘存储。比如一个极端的场景,集群 shard 数量比较少,每个结点上就一个shard,那么读写只会有一块磁盘发挥作用,其他磁盘都空闲的。

      多路径对读写有提升比较大的场景,是每个结点上 shard 数量至少比盘的数量多,并且 shard 大小也差别不太多;shard 数量比较少,shard 大小差别太大,可能产生读写热点问题,即有的磁盘磁盘很忙,有的很闲。

      ES 不会将一个索引的主副分片分配到同一台机器,所以即使一台机器的 RAID0 坏了,不会导致数据丢失,仅仅是副本没有了。

      用 RAID0 的负面影响主要是磁盘损坏的时候,需要恢复的数据比较多;多路径磁盘,坏一块只会丢一部分数据,恢复数据会比较快;但是他也有缺陷,比如容易出现读写热点问题以及磁盘空间使用不均匀问题。

      10、查询索引分片(Shard)位置的接口

      ```

      推荐

      GET /_cat/shards/?v

      GET /_cluster/state/routing_table
      ```

      11、multi_match 与 match_phrase 的区别

    • multi_match 是对 boolQuery().should(matchQuery(field, keyword)) 的一种简化,简单说就是一个关键词,匹配多个字段,匹配方式为 matchQuery,正常的全文匹配。
    • match_phrase 简单说就是要匹配一个短语,例如你输入的文本为:中国人,如果被分词为:中国/人,那么查找时候会在指定的字段先查找到 "中国" 这个 term,然后在 "中国" 这个 term 后面去查找 "人"这个term(有顺序要求),如果匹配到则认为匹配成功;所以更像是在匹配一个短语(连贯的句子)。

      12、analyzer, tokenizer, token-filter 有什么区别

    • analyzer :分析器,analyzer = 1 个 tokenizer + 若干个 token-filter;
    • tokenizer :分词器,主要用于对文本进行切割;
    • token-filter :过滤器,主要对 tokenizer 切割后的 term 进行再次处理。

      13、_source 字段的用途

      简单来说:_source 字段用于存储最原始的 JSON 文档内容(创建索引时传递的),这个字段不能被搜索,它可以在 get 或者 search 请求阶段进行返回;此外它会参与字段高亮计算、文档的更新等操作,一般不推荐关闭 _source 字段。

      三、Kibana

      1、kibana 表格默认排序

      在设计表格的时候直接点击需要排序的那一列,然后让它按照倒序或者正序排序,然后点击保存即可,这样这个表格默认就是按照这一列倒序或者正序排列的。

      ![kibana 排序设置](https://user-gold-cdn.xitu.io/ ... D46696)

      ---
      Any Code,Code Any!

      扫码关注『AnyCode』,编程路上,一起前行。

      ![](https://user-gold-cdn.xitu.io/ ... D45449)

es get 查询获取不到数据,但是用_search就可以查询到,是什么原因呢

rochy 回复了问题 • 3 人关注 • 1 个回复 • 4221 次浏览 • 2018-10-27 16:49 • 来自相关话题