话题 (elasicsearch) 已与当前话题合并
elasticsearch

elasticsearch

es如何根据业务建立索引?

ElasticsearchJElbert 回复了问题 • 4 人关注 • 3 个回复 • 90 次浏览 • 2 小时前 • 来自相关话题

讨论一下ES的cache的作用?

Elasticsearchyunzaiqintian 回复了问题 • 7 人关注 • 3 个回复 • 3594 次浏览 • 3 小时前 • 来自相关话题

如何控制日志导入ElasticSearch之后的体积?

Elasticsearchxinfanwang 回复了问题 • 5 人关注 • 4 个回复 • 69 次浏览 • 4 小时前 • 来自相关话题

跨集群数据同步方案讨论

Elasticsearchmedcl 回复了问题 • 5 人关注 • 2 个回复 • 63 次浏览 • 3 小时前 • 来自相关话题

long类型的时间字段date_histogram,extended_bounds,min无效?

Elasticsearchmedcl 回复了问题 • 3 人关注 • 1 个回复 • 79 次浏览 • 1 天前 • 来自相关话题

es 数据在被修改之后 再发起查询还是会查到未修改前的数据

Elasticsearchcode4j 回复了问题 • 5 人关注 • 4 个回复 • 123 次浏览 • 1 天前 • 来自相关话题

elasticsearch如何查询所有index

Elasticsearchlaoyang360 回复了问题 • 5 人关注 • 6 个回复 • 154 次浏览 • 3 天前 • 来自相关话题

kibana索引memory的大小

Kibanarockybean 回复了问题 • 2 人关注 • 1 个回复 • 79 次浏览 • 3 天前 • 来自相关话题

es2.4.5 dsl聚合优化

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 96 次浏览 • 3 天前 • 来自相关话题

centos7怎么安全的启动关闭重启es集群

Elasticsearchbill 回复了问题 • 2 人关注 • 1 个回复 • 92 次浏览 • 4 天前 • 来自相关话题

failed to put mappings on indices

Elasticsearchqwefdrt 回复了问题 • 3 人关注 • 3 个回复 • 73 次浏览 • 4 天前 • 来自相关话题

创建索引后,配置mapping时,出现这个问题,求教

Elasticsearchyayg2008 回复了问题 • 3 人关注 • 3 个回复 • 113 次浏览 • 4 天前 • 来自相关话题

es升级后分片不分配

Elasticsearchkennywu76 回复了问题 • 6 人关注 • 5 个回复 • 114 次浏览 • 4 天前 • 来自相关话题

es2.X是否有内存分配不要大于32GB这样的限制呢?

Elasticsearchlz8086 回复了问题 • 2 人关注 • 2 个回复 • 90 次浏览 • 4 天前 • 来自相关话题

es如何根据业务建立索引?

回复

ElasticsearchJElbert 回复了问题 • 4 人关注 • 3 个回复 • 90 次浏览 • 2 小时前 • 来自相关话题

讨论一下ES的cache的作用?

回复

Elasticsearchyunzaiqintian 回复了问题 • 7 人关注 • 3 个回复 • 3594 次浏览 • 3 小时前 • 来自相关话题

如何控制日志导入ElasticSearch之后的体积?

回复

Elasticsearchxinfanwang 回复了问题 • 5 人关注 • 4 个回复 • 69 次浏览 • 4 小时前 • 来自相关话题

跨集群数据同步方案讨论

回复

Elasticsearchmedcl 回复了问题 • 5 人关注 • 2 个回复 • 63 次浏览 • 3 小时前 • 来自相关话题

long类型的时间字段date_histogram,extended_bounds,min无效?

回复

Elasticsearchmedcl 回复了问题 • 3 人关注 • 1 个回复 • 79 次浏览 • 1 天前 • 来自相关话题

es 数据在被修改之后 再发起查询还是会查到未修改前的数据

回复

Elasticsearchcode4j 回复了问题 • 5 人关注 • 4 个回复 • 123 次浏览 • 1 天前 • 来自相关话题

elasticsearch如何查询所有index

回复

Elasticsearchlaoyang360 回复了问题 • 5 人关注 • 6 个回复 • 154 次浏览 • 3 天前 • 来自相关话题

kibana索引memory的大小

回复

Kibanarockybean 回复了问题 • 2 人关注 • 1 个回复 • 79 次浏览 • 3 天前 • 来自相关话题

es2.4.5 dsl聚合优化

回复

Elasticsearchlaoyang360 回复了问题 • 2 人关注 • 1 个回复 • 96 次浏览 • 3 天前 • 来自相关话题

centos7怎么安全的启动关闭重启es集群

回复

Elasticsearchbill 回复了问题 • 2 人关注 • 1 个回复 • 92 次浏览 • 4 天前 • 来自相关话题

failed to put mappings on indices

回复

Elasticsearchqwefdrt 回复了问题 • 3 人关注 • 3 个回复 • 73 次浏览 • 4 天前 • 来自相关话题

创建索引后,配置mapping时,出现这个问题,求教

回复

Elasticsearchyayg2008 回复了问题 • 3 人关注 • 3 个回复 • 113 次浏览 • 4 天前 • 来自相关话题

es升级后分片不分配

回复

Elasticsearchkennywu76 回复了问题 • 6 人关注 • 5 个回复 • 114 次浏览 • 4 天前 • 来自相关话题

es2.X是否有内存分配不要大于32GB这样的限制呢?

回复

Elasticsearchlz8086 回复了问题 • 2 人关注 • 2 个回复 • 90 次浏览 • 4 天前 • 来自相关话题

在linux 上使用filebeat 读取日志文件,打开是正常的,用logstash 读取,输出到es乱码问题,怎么解决呢

回复

Logstashfjkfjk 回复了问题 • 5 人关注 • 4 个回复 • 2700 次浏览 • 4 天前 • 来自相关话题

_validate/query?explain解释

Elasticsearchhnj1575565068 发表了文章 • 0 个评论 • 75 次浏览 • 2018-04-24 10:33 • 来自相关话题

使用_validate/query?explain API得到的结果如下,Synonym是什么意思啊?同义词吗?求解释{   "valid": true,   "_shards": {     "total": 1,     "successful": 1,     "failed": 0   },   "explanations": [     {       "index": "country",       "valid": true,       "explanation": "name:z Synonym(name:g name:zg)"     }   ] }
使用_validate/query?explain API得到的结果如下,Synonym是什么意思啊?同义词吗?求解释{   "valid": true,   "_shards": {     "total": 1,     "successful": 1,     "failed": 0   },   "explanations": [     {       "index": "country",       "valid": true,       "explanation": "name:z Synonym(name:g name:zg)"     }   ] }

看到一个词语提取小工具,分享给有标签、词库需求的TX们

Elasticsearchtc 发表了文章 • 1 个评论 • 137 次浏览 • 2018-04-23 13:44 • 来自相关话题

【东家·守艺人】ElasticSearch (ELK) 资深开发工程师(杭州)

求职招聘惜朝 发表了文章 • 0 个评论 • 273 次浏览 • 2018-04-19 20:13 • 来自相关话题

职位描述

  1. 构建基于ElasticSearch(ES)的实时数据分析平台;
  2. 负责个性化搜索、个性化推荐系统的架构和服务;

岗位要求

  1. 熟悉Java开发,包括常用中间件:Dubbo、Zookeeper、MySQL、Redis、MongoDB等;
  2. 熟悉ElasticSearch(ES)/Solr/Lucence原理;
  3. 有ElasticSearch(ES)/Solr/Lucence 工程应用经验丰富;
  4. 有搜索相关功能性能调优优先;

工作地址

杭州 - 西湖区 - 文一西路崇义路口公元里13幢2楼

联系我

职位描述

  1. 构建基于ElasticSearch(ES)的实时数据分析平台;
  2. 负责个性化搜索、个性化推荐系统的架构和服务;

岗位要求

  1. 熟悉Java开发,包括常用中间件:Dubbo、Zookeeper、MySQL、Redis、MongoDB等;
  2. 熟悉ElasticSearch(ES)/Solr/Lucence原理;
  3. 有ElasticSearch(ES)/Solr/Lucence 工程应用经验丰富;
  4. 有搜索相关功能性能调优优先;

工作地址

杭州 - 西湖区 - 文一西路崇义路口公元里13幢2楼

联系我

《死磕 Elasticsearch 方法论》:普通程序员高效精进的 10 大狠招!(完整版)

Elasticsearchlaoyang360 发表了文章 • 0 个评论 • 4069 次浏览 • 2018-04-05 00:01 • 来自相关话题

0、授人以渔,少走半年弯路!

死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招!

一、Elasitcsearch基础篇

1.1 Elasitcsearch基础认知

1、Elasticsearch学习,请先看这一篇!
2、Elasticsearch增、删、改、查操作深入详解
3、Elasticsearch 索引存储深入详解

1.2 Elasticsearch集群部署

4、Elasticsearch安装与测试验证详解
5、Elasticsearch windows下一键安装实现深入详解
6、Elasticsearch集群部署详解
7、Elasticsearch5.4.0(head/kibana/logstash)安装部署深入详解

1.3 Elasticsearch 插件安装

8、Elasticsearch插件一——-head插件安装详解
9、Elasticsearch插件二—— kibana插件安装详解
10、Elasticsearch插件三—— Marvel插件安装详解
11、Elasticsearch插件四—— logstash插件安装详解
12、Elasticsearch插件五—— graph插件安装详解
13、Elasticsearch插件六—— 分词 IK analyzer插件安装详解
14、Elasticsearch5.4.0 IK分词插件安装详解

1.4 Elasticsearch小试牛刀

15、ES技术团队划重点 | ES5.X,你必须知道的API和相关技巧
16、Elasticsearch检索分类深入详解—基础篇
17、上线必备 | 高性能ES5.X部署配置清单
18、 Elasticsearch究竟要设置多少分片数?
19、深究|Elasticsearch单字段支持的最大字符数?
20、Elasticsearch6.X 新类型Join深入详解

二、Elasticsearch进阶篇

2.1 Elasitcsearch数据同步

2.1.1 ES与关系型数据库同步
21、logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解
22、elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解
23、go-mysql-elasticsearch实现mysql 与elasticsearch实时同步深入详解
24、mysql 与elasticsearch实时同步常用插件及优缺点对比
25、logstash-input-jdbc 同步原理及相关问题解读
26、 logstash-input-jdbc实现oracle 与elasticsearch实时同步详解
27、logstash一次同步Mysql多张表到ES深入详解
2.1.2 ES与非关系型数据库同步
28、 logstash_output_mongodb插件用途及安装详解
29、 logstash-output-mongodb实现Mysql到Mongodb数据同步
30、logstash-out-mongodb实现elasticsearch到Mongodb的数据同步
31、mongo-connector实现MongoDB与elasticsearch实时同步深入详解
2.1.3 ES与Kafka同步
32、kafka数据同步Elasticsearch深入详解
2.1.4 ES文件同步
33、 Elasticsearch批量导入本地Json文件Java实现
34、logstash实现日志文件同步到elasticsearch深入详解
2.1.5 ES同步小结
35、如何将不同类型数据导入Elaticsearch中?
36、一张图理清楚关系型/非关系型数据库与Elasticsearch同步

2.2 Elasticsearch检索进阶

37、你必须知道的23个最有用的Elasticseaerch检索技巧
38、Elasticsearch实战 | match_phrase搜不出来,怎么办?

2.3 Elasitcsearch聚合进阶

39、 Elasticsearch聚合深入详解——对比Mysql实现
40、Elasticsearch聚合后分页深入详解
41、Elasticsearch聚合优化 | 聚合速度提升5倍

2.4 Elasticsearch Java API 详解

42、 Elasticsearch Java API深入详解
43、Elasticsearch Jest实战深入详解

2.5 Elasitcsearch数据迁移

44、Elasticsearch索引迁移的四种方式

2.6 Elasticsearch性能测试

45、 Elasticsearch自定义脚本完成性能测试
46、Elasticsearch性能测试工具rally深入详解
47、esrally性能分析结果图形化展示深入详解
48、esrally性能测试原理

2.7 Elasitcsearch安全监控

49、Elasticsearch6.2.2 X-Pack部署及使用详解

三、Elasticsearch实战篇

3.1 Elasticsearch应用场景

50、Elasticsearch的使用场景深入详解
51、 Elasticsearch全文检索实战小结

3.2 Elasticsearch架构设计

52、 Elasticsearch实战——全文检索架构设计
53、干货 |《深入理解Elasticsearch》读书笔记

3.3 Elasticsearch项目实战

54、Elasticsearch全文检索系统实现深入详解
55、 Elasticsearch大文件检索性能提升20倍实践(干货)
56、刨根问底 | Elasticsearch 5.X集群多节点角色配置深入详解
57、干货 | Elasticsearch5.X Mapping万能模板
58、干货 | Elasticsearch 集群健康值红色终极解决方案
59、 实战 | Elasticsearch打造知识库检索系统
60、Elasticsearch实战 | 必要的时候,还得空间换时间!
61、 Elasticsearch全量数据增量遍历实现原理
62、 Elasticsearch索引增量统计及定时邮件实现

更多干货,持续更新中..... 更新地址:http://t.cn/Rmwzx9t

和你一起,死磕ELK Stack!

ES数据备份和清理-快照

Elasticsearchziyou 发表了文章 • 0 个评论 • 167 次浏览 • 2018-04-04 17:41 • 来自相关话题

        这两天在看ES数据备份方面的事情,因为我们ES集群的存储空间有限,需要定时对ES的数据进行备份和清理,把备份的数据存储到其他地方去,然后在ES集群中释放掉。         看大家好多是主要考虑数据的安全性才做的数据的备份,我们就比较low了,我们就是因硬盘不够,要删数据。上个项目是因为日志数据重要程度一般般,就保留了一个月的量,然后也没有做数据的备份转储。这次上线的项目要求就高点了,需要删除的数据存储到其他地方,但是硬盘的容量更低了。所以就需要做ES数据备份和转储,转储完了就清掉。         这里是用ES官方推荐的数据快照方案,这个方案可以完全通过ES API进行操作,比价方便、快捷,在数据恢复方面也是方便的。 先上ES官方的链接,大家看看:https://www.elastic.co/guide/e ... .html         然后就是步骤了: 执行过程分为两部分: 一、准备过程 1、添加ES备份存储目录 在集群的每台机器上进行目录创建 mkdir /home/esdata 2、挂载共享文件存储目录 在集群的每台机器上目录挂载 mount -t nfs 10.70.61.80:/home/apmtest /home/esdata 3、修改ES集群配置 在ES集群的每台机器上都添加path.repo属性 path.repo: ["/home/esdata"] 4、重启ES集群 ES集群重启必须是关闭所有机器后,再启动。 5、建立备份仓库 PUT /_snapshot/my_backup    {      "type": "fs",        "settings": {          "location": "/home/esdata"        }  } 二、备份数据快照 1、通过API执行备份 PUT /_snapshot/my_backup/snapshot_2018.03.01?wait_for_completion=true  {      "indices": "filebeat-2018.03.01"  }           快照仓库需要注意的地方就是需要在整个集群的每一台机器上挂载相同的共享文件存储目录,保证在集群里做的操作是输出到相同的地方的。   下面来一份shell脚本,可以定时执行,是做ES数据的定时转储和清理的,大家可以借鉴一下
#!/bin/bash
ESIP=127.0.0.1
DATE=`date -d '-2 days' +'%Y.%m.%d'`
 
echo "begin to backup ES LOG..."
 
curl -XPUT "http://$ESIP:9200/_snapshot/my_backup/snapshot_$DATE?wait_for_completion=true" -d '{ "indices": "filebeat-$DATE" }'
 
echo "----------------------------------------------------------------------------"
 
echo "begin to clean ES LOG..."
 
URL1="http://$ESIP:9200/filebeat-$DATE"
 
curl -XDELETE $URL1

 
echo "TRANSFER AND CLEAN ES LOG END!"

php的操作类库,通过写sql来转化dsl来查询elasticsearch

Elasticsearchqieangel2013 发表了文章 • 1 个评论 • 636 次浏览 • 2018-03-21 15:44 • 来自相关话题

EsParser

php的操作类库,通过写sql来转化dsl来查询elasticsearch

composer使用

{
    "require": {
        "qieangel2013/esparser": "dev-master"
    }
}
composer install
require __DIR__.'/vendor/autoload.php';
$sql = 'select * from alp_dish_sales_saas where sid in(994,290) limit 1,10';
//$sql='update alp_dish_sales_saas set mid=3  where adsid=15125110';
//$sql='delete from alp_dish_sales_saas where adsid=15546509';
$es_config=array(
    'index' =>"alp_dish_sales_saas",
    'type'  =>"alp_dish_sales_saas",
    'url'   =>"http://127.0.0.1:9200",
    'version' =>"5.x" //1.x 2.x 5.x 6.x,可以不配置,系统会请求获取版本,这样会多一次请求,建议配置一下
 );
$parser = new EsParser($sql, true,$es_config);//第三个参数是es的配置参数,一定要配置
print_r($parser->result);//打印结果
//print_r($parser->explain());//打印dsl

普通调用

require_once dirname(__FILE__) . '/src/library/EsParser.php';
$sql = 'select * from alp_dish_sales_saas where sid in(994,290) limit 1,10';
//$sql='update alp_dish_sales_saas set mid=3  where adsid=15125110';
//$sql='delete from alp_dish_sales_saas where adsid=15546509';
$es_config=array(
        'index' =>"alp_dish_sales_saas",
        'type'  =>"alp_dish_sales_saas",
        'url'   =>"http://127.0.0.1:9200",
        'version' =>"5.x" //1.x 2.x 5.x 6.x,可以不配置,系统会请求获取版本,这样会多一次请求,建议配置一下
    );
$parser = new EsParser($sql, true,$es_config);//第三个参数是es的配置参数,一定要配置
print_r($parser->result);//打印结果
//print_r($parser->explain()); //打印dsl

目前支持的sql函数

*  SQL Select
*  SQL Delete
*  SQL Update
*  SQL Where
*  SQL Order By
*  SQL Group By
*  SQL AND & OR 
*  SQL Like
*  SQL COUNT distinct
*  SQL In
*  SQL avg()
*  SQL count()
*  SQL max()
*  SQL min()
*  SQL sum()
*  SQL Between
*  SQL Aliases

使用注意事项

请在配置项填写es的版本,这样系统不会请求获取版本,这样不会多一次请求,建议配置一下

交流使用

qq群:578276199

项目地址

github:https://github.com/qieangel2013/EsParser
oschina:https://gitee.com/qieangel2013/EsParser

elasticsearch分词检索的match-query匹配过程分析

Elasticsearch夏李俊 发表了文章 • 3 个评论 • 368 次浏览 • 2018-03-14 12:00 • 来自相关话题

1. 模拟字符串数据存储
localhost:9200/yigo-redist.1/_analyze?analyzer=default&text=全能片(前)---TRW-GDB7891AT刹车片自带报警线,无单独报警线号码,卡仕欧,卡仕欧,乘用车,刹车片
上面的url表示
  •     索引为`yigo-redist.1`
  •     使用了索引`yigo-redist.1`中的分词器(`analyzer`) `default`
  •     解析的字符串(`text`)为"全能片(前)---TRW-GDB7891AT刹车片自带报警线,无单独报警线号码,卡仕欧,卡仕欧,乘用车,刹车片"
如果结果为:
{
  "tokens" : [ {
    "token" : "全能",
    "start_offset" : 0,
    "end_offset" : 2,
    "type" : "CN_WORD",
    "position" : 1
  }, {
    "token" : "片",
    "start_offset" : 2,
    "end_offset" : 3,
    "type" : "CN_CHAR",
    "position" : 2
  }, {
    "token" : "前",
    "start_offset" : 4,
    "end_offset" : 5,
    "type" : "CN_CHAR",
    "position" : 3
  }, {
    "token" : "trw-gdb7891at",
    "start_offset" : 9,
    "end_offset" : 22,
    "type" : "LETTER",
    "position" : 4
  }, {
    "token" : "刹车片",
    "start_offset" : 22,
    "end_offset" : 25,
    "type" : "CN_WORD",
    "position" : 5
  }, {
    "token" : "自带",
    "start_offset" : 25,
    "end_offset" : 27,
    "type" : "CN_WORD",
    "position" : 6
  }, {
    "token" : "报警",
    "start_offset" : 27,
    "end_offset" : 29,
    "type" : "CN_WORD",
    "position" : 7
  }, {
    "token" : "线",
    "start_offset" : 29,
    "end_offset" : 30,
    "type" : "CN_CHAR",
    "position" : 8
  }, {
    "token" : "无",
    "start_offset" : 31,
    "end_offset" : 32,
    "type" : "CN_WORD",
    "position" : 9
  }, {
    "token" : "单独",
    "start_offset" : 32,
    "end_offset" : 34,
    "type" : "CN_WORD",
    "position" : 10
  }, {
    "token" : "报警",
    "start_offset" : 34,
    "end_offset" : 36,
    "type" : "CN_WORD",
    "position" : 11
  }, {
    "token" : "线",
    "start_offset" : 36,
    "end_offset" : 37,
    "type" : "CN_CHAR",
    "position" : 12
  }, {
    "token" : "号码",
    "start_offset" : 37,
    "end_offset" : 39,
    "type" : "CN_WORD",
    "position" : 13
  }, {
    "token" : "卡",
    "start_offset" : 40,
    "end_offset" : 41,
    "type" : "CN_CHAR",
    "position" : 14
  }, {
    "token" : "仕",
    "start_offset" : 41,
    "end_offset" : 42,
    "type" : "CN_WORD",
    "position" : 15
  }, {
    "token" : "欧",
    "start_offset" : 42,
    "end_offset" : 43,
    "type" : "CN_WORD",
    "position" : 16
  }, {
    "token" : "卡",
    "start_offset" : 44,
    "end_offset" : 45,
    "type" : "CN_CHAR",
    "position" : 17
  }, {
    "token" : "仕",
    "start_offset" : 45,
    "end_offset" : 46,
    "type" : "CN_WORD",
    "position" : 18
  }, {
    "token" : "欧",
    "start_offset" : 46,
    "end_offset" : 47,
    "type" : "CN_WORD",
    "position" : 19
  }, {
    "token" : "乘用车",
    "start_offset" : 48,
    "end_offset" : 51,
    "type" : "CN_WORD",
    "position" : 20
  }, {
    "token" : "刹车片",
    "start_offset" : 52,
    "end_offset" : 55,
    "type" : "CN_WORD",
    "position" : 21
  } ]
}
2. 关键词查询
localhost:9200//yigo-redist.1/_analyze?analyzer=default_search&text=gdb7891
  •     索引为`yigo-redist.1`
  •     使用了索引`yigo-redist.1`中的分词器(`analyzer`) `default_search`
  •     解析的字符串(`text`)为"gdb7891"
返回结果:
{
  "tokens" : [ {
    "token" : "gdb7891",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "LETTER",
    "position" : 1
  } ]
}
3. 关键词使用存储的分词器查询
localhost:9200//yigo-redist.1/_analyze?analyzer=default&text=gdb7891
  •     索引为`yigo-redist.1`
  •     使用了索引`yigo-redist.1`中的分词器(`analyzer`) `default_search`
  •     解析的字符串(`text`)为"gdb7891"
返回结果:
{
  "tokens" : [ {
    "token" : "gdb7891",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "LETTER",
    "position" : 1
  }, {
    "token" : "",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "LETTER",
    "position" : 1
  }, {
    "token" : "gdb7891",
    "start_offset" : 0,
    "end_offset" : 7,
    "type" : "LETTER",
    "position" : 1
  }, {
    "token" : "",
    "start_offset" : 0,
    "end_offset" : 3,
    "type" : "ENGLISH",
    "position" : 2
  }, {
    "token" : "gdb",
    "start_offset" : 0,
    "end_offset" : 3,
    "type" : "ENGLISH",
    "position" : 2
  }, {
    "token" : "gdb",
    "start_offset" : 0,
    "end_offset" : 3,
    "type" : "ENGLISH",
    "position" : 2
  }, {
    "token" : "7891",
    "start_offset" : 3,
    "end_offset" : 7,
    "type" : "ARABIC",
    "position" : 3
  }, {
    "token" : "7891",
    "start_offset" : 3,
    "end_offset" : 7,
    "type" : "ARABIC",
    "position" : 3
  }, {
    "token" : "",
    "start_offset" : 3,
    "end_offset" : 7,
    "type" : "ARABIC",
    "position" : 3
  } ]
}
总结
  •     通过步骤1可以看出,存储的数据"全能片(前)---TRW-GDB7891AT刹车片自带报警线,无单独报警线号码,卡仕欧,卡仕欧,乘用车,刹车片",被拆分成了很多词组碎片,然后存储在了索引数据中
  •     通过步骤2可以看出,当关键词输入"gdb7891",这个在检索分词器(`default_search`)下,没有拆分,只一个可供查询的碎片就是"gdb7891",但是步骤1,拆分的碎片里不存在"gb7891"的词组碎片,唯一相近的就是"trw-gdb7891at",所以使用普通的match-query是无法匹配步骤1输入的索引数据
  •     通过步骤3,可以看出如果使用相同的分词器,"gdb7891"能够拆分成"gdb","7891"等等,通过这2个碎片都能找到步骤1输入的索引数据,但是因为关键词被拆分了,所以会查询到更多的匹配的数据,比如:与"gdb"匹配的,与"7891"匹配的,与"gdb7891"匹配的
  •     如果说想通过分词器(`default_search`)检索出步骤1的数据,需要使用wildcard-query,使用"*gdb7891*",就可以匹配
      {      "query": {          "wildcard" : { "description" : "*gdb7891*" }      }  }
  

elasticsearch参考手册 (译文)

Elasticsearchcode4j 发表了文章 • 2 个评论 • 852 次浏览 • 2018-03-14 00:29 • 来自相关话题

一直以来官方手册都是零散的阅读,没有完整的看过,导致对es很多功能还有使用细节并不是非常了解。   然后最近也是在debug 看源码,顺便想把官方文档也刷了,决定开始自己翻译 elasticsearch 官方参考手册。看到之前网上有人在翻译但是没有翻译完,自己也尝试一下。   公司用的是2.2版本的所以我就从这个版本开始翻译了,译文中会有一些批注,后续会持续关注高版本并把特性以批注的方式补上说明。   在线阅读: www.code4j.tech   github地址:https://github.com/rpgmakervx/ ... ation   掘金翻译计划:https://github.com/xitu/gold-miner   计划每周翻译两三篇吧,看情况。   英语只有六级啦,有些地方翻译起来也很笨拙,有翻译不恰当之处大家可以提issue呀!
一直以来官方手册都是零散的阅读,没有完整的看过,导致对es很多功能还有使用细节并不是非常了解。   然后最近也是在debug 看源码,顺便想把官方文档也刷了,决定开始自己翻译 elasticsearch 官方参考手册。看到之前网上有人在翻译但是没有翻译完,自己也尝试一下。   公司用的是2.2版本的所以我就从这个版本开始翻译了,译文中会有一些批注,后续会持续关注高版本并把特性以批注的方式补上说明。   在线阅读: www.code4j.tech   github地址:https://github.com/rpgmakervx/ ... ation   掘金翻译计划:https://github.com/xitu/gold-miner   计划每周翻译两三篇吧,看情况。   英语只有六级啦,有些地方翻译起来也很笨拙,有翻译不恰当之处大家可以提issue呀!

Elastic日报 第189期 (2018-02-14)

Elastic日报elk123 发表了文章 • 0 个评论 • 320 次浏览 • 2018-02-14 22:41 • 来自相关话题

1. 日志收集工具fluentd与logstash比较。  http://t.cn/RR9sgLX 2. 如何通过logstash将csv数据导入到elasticsearch。 http://t.cn/RCGeeJK 3. 搜索引擎选择:Elasticsearch与Solr http://t.cn/RUncwIu   编辑:wt 归档:https://elasticsearch.cn/article/503 订阅:https://tinyletter.com/elastic-daily
1. 日志收集工具fluentd与logstash比较。  http://t.cn/RR9sgLX 2. 如何通过logstash将csv数据导入到elasticsearch。 http://t.cn/RCGeeJK 3. 搜索引擎选择:Elasticsearch与Solr http://t.cn/RUncwIu   编辑:wt 归档:https://elasticsearch.cn/article/503 订阅:https://tinyletter.com/elastic-daily

Elastic日报 第185期 (2018-02-10)

Elastic日报elk123 发表了文章 • 0 个评论 • 290 次浏览 • 2018-02-10 11:29 • 来自相关话题

  1. Elasticsearch与Hbase特性对比。 http://t.cn/RRyM1vm
  2. 将Elasticsearch作为Hive的存储? http://t.cn/RRyxDNZ
  3. 基于Elasticsearch实现搜索推荐 http://t.cn/RRyJiHx
  1. Elasticsearch与Hbase特性对比。 http://t.cn/RRyM1vm
  2. 将Elasticsearch作为Hive的存储? http://t.cn/RRyxDNZ
  3. 基于Elasticsearch实现搜索推荐 http://t.cn/RRyJiHx

Elasticsearch mapping 配置个人解读

Elasticsearch夏李俊 发表了文章 • 0 个评论 • 725 次浏览 • 2018-02-09 15:47 • 来自相关话题

配置详解 文件中"mapping":{}中的内容,即为创建索引的mappingsource 如:
"mappings": {
    "_default_" : {    //@1
        "_all" : {"enabled" : true},    //@2
        "properties" : {    //@3
            "tableType" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},    //@4
            "caption" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
            "code" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
            "description" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
            "perm" : {"type" : "string", "index" : "not_analyzed", "include_in_all" : false}
		}
	},
	"ec02_goodsinfo" : {    //@5
	    "_all" : {"enabled" : true},    //@6
		"properties" : {    //@7
			"tableType" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
			"caption" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
			"code" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
			"description" : {"type" : "string", "index" : "no", "include_in_all" : false, "store": true},
			"perm" : {"type" : "string", "index" : "not_analyzed", "include_in_all" : false},
			"bill":{    //@8
				properties" : {
		                       "CreateYear" : {"type" : "string", "index" : "not_analyzed", "include_in_all" : true}    //@9
				}
			}
		}
	}
}
  • @1 _default_所有单据默认的创建索引的配置
  • @2 _all{} 每个单据下所有的字段配置,"enabled" : true 所有字段创建索引,false 所有字段禁止创建索引,[*注意]除非properties指定的字段,默认字段类型将自动匹配
  • @3 properties {},每个单据下字段或者properties的指定配置
  • @4 properties {}中指定了属性(properties):"tableType"的检索配置,type:string > 类型字符串,include_in_all:false > 改字段或者属性不包含在单据的所有字段中,"store": true > 储存在数据库中
  • @5 ec02_goodsinfo 表示对单据 "ec02_goodsinfo" 的特定检索配置
  • @6 _all{} 只对"ec02_goodsinfo"单据下所有的字段配置
  • @7 properties {},只对"ec02_goodsinfo"单据下字段或者properties的指定配置
  • [*注意]@8,@9 bill在单据中额字段都会包括一层bill,所以如果要对单据中某个字段指定需要套一层bill{}
----------------------------------------------------------------------------------------------------------------------------------------- 属性解说 版本5.X以前
  • index 可选值为analyzed(默认)和not_analyzed,如果是字段是字符串类型的,则可以是not_analyzed
  • store 可选值为yes或no,指定该字段的原始值是否被写入索引中,默认为no,即结果中不能返回该字段。
  • boost默认为1,定义了文档中该字段的重要性,越高越重要
  • null_value 如果一个字段为null值(空数组或者数组都是null值)的话不会被索引及搜索到,null_value参数可以显示替代null values为指定值,这样使得字段可以被搜索到。
  • include_in_all 指定该字段是否应该包括在_all字段里头,默认情况下都会包含。
  • type 可以指定String,long,int,doulbe,floot,boolean,等
版本5.X以后
  • 原本type string,其index 可选值为analyzed(默认)和not_analyzed,现在直接拆违type text( index analyzed),type keyword(index not_analyzed)
  • store 可选值为enable或false,指定该字段的原始值是否被写入索引中,默认为enable,即结果中不能返回该字段。
  • index 表示是否用于检索默认enable,可选false
------------------------------------------------------------------------------------------------------------------------------- 字段的数据类型
  • 简单类型string(指定分词器)
  • date(默认使用UTC保持,也可以使用format指定格式)
  • 数值类型(byte,short,integer,long,float,double)
  • boolean
  • binary(存储在索引中的二进制数据的base64表示,比如图像,只存储不索引)
  • ip(以数字形式简化IPV4地址的使用,可以被索引、排序并使用IP值做范围查询)注意string是5.x以前的,5.x之后被分裂为text,keyword
有层级结构的类型,比如object 或者 nested. 特殊类型
  • geo_point
  • geo_shape
  • completion
 

【阿里云】专访阿里云 MVP & Elastic中文社区发起人 曾勇—— 做你想做的事情,培养解决问题的能力

Elasticsearchfeil 发表了文章 • 1 个评论 • 375 次浏览 • 2018-02-06 13:45 • 来自相关话题

本期邀请阿里云MVP & Elastic中文社区发起人曾勇进行专访! 详细专访请戳这里或扫描下图中二维码查看,谢谢! 曾勇用专业传递技术能量,分享自身技术发展之路,从技术人转型到技术管理者的历程,创新的技术能量希望对你有所启发!
封面-曾勇.jpg
 
本期邀请阿里云MVP & Elastic中文社区发起人曾勇进行专访! 详细专访请戳这里或扫描下图中二维码查看,谢谢! 曾勇用专业传递技术能量,分享自身技术发展之路,从技术人转型到技术管理者的历程,创新的技术能量希望对你有所启发!
封面-曾勇.jpg
 

java 客户端 获取 termvectors

ElasticsearchJiaShiwen 发表了文章 • 0 个评论 • 604 次浏览 • 2018-01-19 15:56 • 来自相关话题

elasticsearch的termvectors包括了term的位置、词频等信息。这些信息用于相应的数据统计或开发其他功能,本文介绍termvecters如何使用,如何通过java客户端获取termvectors相关信息。

要使用termvctor首先要配置mapping中field的"term_vector"属性,默认状态es不开启termvector,因为这样会增加索引的体积,毕竟多存了不少元数据。

PUT test
{
  "mappings": {
    "qa_test": {
      "dynamic": "strict",
      "_all": {
        "enabled": false
      },
      "properties": {
        "question": {
          "properties": {
            "cate": {
              "type": "keyword"
            },
            "desc": {
              "type": "text",
              "store": true,
              "term_vector": "with_positions_offsets_payloads",
              "analyzer": "ik_smart"
            },
            "time": {
              "type": "date",
              "store": true,
              "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
            },
            "title": {
              "type": "text",
              "store": true,
              "term_vector": "with_positions_offsets_payloads",
              "analyzer": "ik_smart"
            }
          }
        },
        "updatetime": {
          "type": "date",
          "store": true,
          "format": "strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
        }
      }
    }
  },
  "settings": {
    "index": {
      "number_of_shards": "1",
      "requests": {
        "cache": {
          "enable": "true"
        }
      },
      "number_of_replicas": "1"
    }
  }
}

注意示例中的"title"的"term_vector"属性。

接下来为索引创建一条数据

PUT qa_test_02/qa_test/1
{
  "question": {
    "cate": [
      "装修流程",
      "其它"
    ],
    "desc": "筒灯,大洋和索正这两个牌子,哪个好?希望内行的朋友告知一下,谢谢!",
    "time": "2016-07-02 19:59:00",
    "title": "筒灯大洋和索正这两个牌子哪个好"
  },
  "updatetime": 1467503940000
}

下面我们看看这条数据上question.title字段的termvector信息

GET qa_test_02/qa_test/1/_termvectors
{
  "fields": [
    "question.title"
  ],
  "offsets": true,
  "payloads": true,
  "positions": true,
  "term_statistics": true,
  "field_statistics": true
}

结果大概这个样子

{
  "_index": "qa_test_02",
  "_type": "qa_test",
  "_id": "1",
  "_version": 1,
  "found": true,
  "took": 0,
  "term_vectors": {
    "question.title": {
      "field_statistics": {
        "sum_doc_freq": 9,
        "doc_count": 1,
        "sum_ttf": 9
      },
      "terms": {
        "和": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 2,
              "start_offset": 4,
              "end_offset": 5
            }
          ]
        },
        "哪个": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 7,
              "start_offset": 12,
              "end_offset": 14
            }
          ]
        },
        "大洋": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 1,
              "start_offset": 2,
              "end_offset": 4
            }
          ]
        },
        "好": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 8,
              "start_offset": 14,
              "end_offset": 15
            }
          ]
        },
        "正": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 4,
              "start_offset": 6,
              "end_offset": 7
            }
          ]
        },
        "牌子": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 6,
              "start_offset": 10,
              "end_offset": 12
            }
          ]
        },
        "筒灯": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 0,
              "start_offset": 0,
              "end_offset": 2
            }
          ]
        },
        "索": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 3,
              "start_offset": 5,
              "end_offset": 6
            }
          ]
        },
        "这两个": {
          "doc_freq": 1,
          "ttf": 1,
          "term_freq": 1,
          "tokens": [
            {
              "position": 5,
              "start_offset": 7,
              "end_offset": 10
            }
          ]
        }
      }
    }
  }
}

下面我们说说如何通过java代码实现termvector的获取,不说废话直接上代码

            TermVectorsResponse     termVectorResponse = client.prepareTermVectors().setIndex(sourceindexname).setType(sourceindextype)
                        .setId(id).setSelectedFields(fieldname).setTermStatistics(true).execute()
                        .actionGet();
                XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);
                termVectorResponse.toXContent(builder, null);
                System.out.println(builder.string());
                Fields fields = termVectorResponse.getFields();
                Iterator<String> iterator = fields.iterator();
                while (iterator.hasNext()) {
                    String field = iterator.next();
                    Terms terms = fields.terms(field);
                    TermsEnum termsEnum = terms.iterator();
                    while (termsEnum.next() != null) {
                        BytesRef term = termsEnum.term();
                        if (term != null) {
                            System.out.println(term.utf8ToString() + termsEnum.totalTermFreq());
                        }
                    }
                }

获取TermVectorsResponse的代码很好理解,主要是设置索引名称、索引type、索引id以及需要展示的若干属性。

接下来是如何获取某一term的termvector,有两种方案第一种是通过TermVectorsResponse的toXContent方法直接生成XContentBuilder,这种方法可以直接获取和上面通过DSL查询一样的json结果;第二种是通过Fields的iterator遍历fields,获取TermsEnum,熟悉lucene的同学应会更熟悉第二种方法。