我导入了一份网上的数据,然后查看mapping结构是这样的
问题是: 比如name字段,是text类型?那下面的fields那部分(包含keyword)的含义是什么呢?
我试了下,这个user.name字段termQuery搜索不到,matchQuery才能搜索的到?越来越搞不清楚了,help下我这个菜鸟
网上查了下资料,es 5.x开始text和keyword是不同的string。我想问user.name是text还是keyword类型呢?为什么matchQuery能查到,termQuery查不到呢?
为了表述清楚,导入的数据的一份数据截图如下
3 个回复
wangjueying - Java攻城狮-ES爱好者
赞同来自: novia 、laoyang360
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
赞同来自:
网址打开后第一行就是数据,下载下来后我把collections-anon.txt的数据导入了我的es服务器(即mapping是es自动生成的),其他2个数据文件没有导入。
我刚才又查了下text和keyword,初步了解了下。但是对于导入数据的mapping结构中的fields还是不理解(即问题截图给的fields字段)