沙师弟,师父的充电器掉了

elasticsearch 5.5 mapping问题

Elasticsearch | 作者 ningbohezhijun | 发布于2017年08月07日 | 阅读数:4227

我导入了一份网上的数据,然后查看mapping结构是这样的

QQ截图20170807103921.png


问题是: 比如name字段,是text类型?那下面的fields那部分(包含keyword)的含义是什么呢?
 
我试了下,这个user.name字段termQuery搜索不到,matchQuery才能搜索的到?越来越搞不清楚了,help下我这个菜鸟
 
网上查了下资料,es 5.x开始text和keyword是不同的string。我想问user.name是text还是keyword类型呢?为什么matchQuery能查到,termQuery查不到呢?
 
 
为了表述清楚,导入的数据的一份数据截图如下
 
QQ截图20170807151131.png
已邀请:

wangjueying - Java攻城狮-ES爱好者

赞同来自: novia laoyang360

你这例子里:user.name和user.name.keyword是多字段,多字段作用一般用于同字段做不同的分词器(analyzer)来增强搜索结果的准确度的(或者说不同的查询)。
 
user.name是作为text来indexing的,他默认是被分词器分析的。
user.name.keyword作为keyword类型,默认使用keyword analyzer来做分析,
当你用match来匹配user.name.keyword字段时,必须保证输入的内容一致才能被匹配上。而user.name则不需要。
 
举个例子来说:user.name 为字符串 "我爱中国"时,你搜中国可能就可以匹配上,但是这时你想用user.name.keyword来匹配那就必须输入"我爱中国"才能匹配上。

novia - 1&0

赞同来自:

可以参考下这篇说明:
https://www.elastic.co/guide/e ... .html
 
方便的说,可以提供下数据样例

ningbohezhijun

赞同来自:

数据是网上找来的,http://www.rendoumi.com/wang-e ... u-ju/
网址打开后第一行就是数据,下载下来后我把collections-anon.txt的数据导入了我的es服务器(即mapping是es自动生成的),其他2个数据文件没有导入。
 
我刚才又查了下text和keyword,初步了解了下。但是对于导入数据的mapping结构中的fields还是不理解(即问题截图给的fields字段)

要回复问题请先登录注册