文档章节

Elasticsearch问题整理

开源中国首席公关
 开源中国首席公关
发布于 2017/05/12 15:53
字数 791
阅读 70
收藏 1

本文仅用于记录本人在使用ES的过程中遇到的问题以及解决办法

当前版本:5.3

1,字段为NULL值时(未做特殊处理),排序无效

/**
 * 获取车源信息Mapping<一般用于手动调用>
 * @return
 */
public static XContentBuilder getMapping(){
	XContentBuilder mapping = null;
	try {
		mapping = XContentFactory.jsonBuilder()
				.startObject()
				.startObject(ES_TYPE_NAME)
				.startObject("properties")
				.startObject("id").field("type", "long").field("store", true).endObject()
				.startObject("carname").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carbrand").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carbrandid").field("type", "long").field("store", true).endObject()
				.startObject("carseries").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carseriesid").field("type", "long").field("store", true).endObject()
				.startObject("carcategory").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carcategoryid").field("type", "long").field("store", true).endObject()
				.startObject("price").field("type", "integer").field("store", true).field("index", true).endObject()
				.startObject("keyword").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("mode").field("type", "integer").field("store", true).endObject()
				.startObject("outcolor").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("aggsoutcolor").field("type", "keyword").field("store", true).endObject() //.field("fielddata",true)
				.startObject("innercolor").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carregion").field("type", "integer").field("store", true).endObject()
				.startObject("provinceid").field("type", "long").field("store", true).endObject()
				.startObject("province").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("carregiondisplay").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("salestatus").field("type", "integer").field("store", true).endObject()
				.startObject("carsourcecode").field("type", "text").field("store", true).field("index", true).endObject()
				.startObject("carstatus").field("type", "integer").field("store", true).endObject()
				.startObject("arearemark").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("remark").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("username").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("companyname").field("type", "text").field("store", true).field("analyzer", "ik_max_word").field("search_analyzer", "ik_smart").endObject()
				.startObject("companycertstatus").field("type", "integer").field("store", true).endObject()
				.startObject("updatetime").field("type", "long").field("store", true).endObject()
				.startObject("weight").field("type", "long").field("store", true).field("null_value", 0).endObject()
				.endObject()
				.endObject()
				.endObject();
	} catch (IOException e) {
		logger.error("创建车源Mapping出错", e);
	}
	return mapping;
}

代码段中,weight字段添加了属性null_value。当没有添加该属性值时,以weight字段做搜索排序的时候,发现数据并未生效。

 2,聚合查询时,字符串类型的字段做聚合字段时的配置问题

Elasticsearch的数据类型中支持字符串的类型有text、keyword,如果需要使用前者作为聚合时,需要添加属性fielddata=true。本人刚才也是如此配置,但是发现得到的结果也有问题,数据项并不是原始字符(应该是被分词处理过,只能拿到其中一个字符,但本人并未配置分词)。

默认Elasticserach并不支持text类型的数据聚合、排序。

另外Elasticsearch官方并不建议使用字符串类型的字段做聚合项,因为它将消耗较多内存资源,请尽量避免。

解决方式:另加一个不需要被分词的keyword类型的字段用于聚合

3, 聚合查询时,返回数据条数有误

本人使用多字段聚合时,发现当某个字段的数据项多于10个的时候,得到的总数与其他聚合字段不等。

后续翻阅ES官方文档,发现ES在做聚合查询时,默认只返回按数量排序的前10条。

解决方式:设置size

© 著作权归作者所有

开源中国首席公关
粉丝 3
博文 14
码字总数 4852
作品 0
常德
程序员
私信 提问
加载中

评论(3)

开源中国首席公关
开源中国首席公关

引用来自“说多了都是眼泪”的评论

加keyword可以支持text聚合
笔记上有说明的,5.3也是可以的 “解决方式:另加一个不需要被分词的keyword类型的字段用于聚合”
说多了都是眼泪
说多了都是眼泪
5.4.3
说多了都是眼泪
说多了都是眼泪
加keyword可以支持text聚合
elasticsearch搜索引擎相关资料(更新中)

最近需要用到elasticsearch搜索引擎,所以搜集了很多相关资料,先放在这里(未详细整理) 一、步骤总结:(linux环境下) 1. 安装 (1)下载elasticsearch安装包:http://www.elasticsearch....

核桃人
2018/03/08
0
0
基于ELK实时日志分析的最佳实践

在2018云栖大会深圳峰会大数据分析与可视化专场上,由阿里巴巴搜索引擎事业部开放搜索团队的吴迪带来了“基于ELK实时日志分析的最佳实践”的主题分享。介绍了传统的日志分析、ELK的概念和ELK...

smile小太阳
2018/05/06
0
0
Elasticsearch存储空间不够导致索引只读的解决方法

问题描述 今天发现当天的索引在ES中并没有创建,logstash中不停的报错: 索引变成了只读: es报错,es报错也是索引只读错误 解决办法 经过分析,发现是因为ES所在服务器磁盘空间太低引起,具...

傲娇字符
01/17
0
0
Elastic 南京 Meetup

1. 主办方 Elastic中文社区 趋势科技 2. 时间地点 活动时间:2018年6月30日 13:00 - 18:00 活动地点:雨花区软件大道48号苏豪国际广场B座 趋势科技中国研发中心(靠花神庙地铁站) 3. 报名地...

Medcl
2018/06/04
69
0
CentOS7 部署 ElasticSearch 集群

环境 主机名 IP 操作系统 ES 版本 es227 192.168.1.227 CentOS7.5 6.5.4 es228 192.168.1.228 CentOS7.5 6.5.4 es229 192.168.1.229 CentOS7.5 6.5.4 下载 elasticsearch-6.5.4.tar.gz --- 各......

俊赛潘安-才比管乐
2018/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
35分钟前
2
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
2
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部