使用 nohup 或 disown 如果你要让某个进程运行在后台。

ES 查询问题,请教大神帮忙

Elasticsearch | 作者 xiewh | 发布于2018年02月24日 | 阅读数:2757

我在使用ES查询数据时遇到一个问题,具体情况如下
 
我的数据格式如下图

数据格式.png

 
查询语句如下

查询语句.png

 
但是问题出现了,doc['user_channel_id'].value 不能正确获取到数据,doc['analyze_info.channel_id'].value是没问题的
 
请教大神们,这个问题要怎么解决呀
 
坐等大神们指点!!!
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

确认你是nested类型吗?mapping发一下

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自:

你执行查询的时候有报错吗? 你把 mapping 拿出来看下,user_channel_id 是什么类型?text?

xiewh

赞同来自:

mapping
 




2.png

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自:

测试过 integer 类型使用 doc 获取值是没有问题的,doc 本身使用 doc_values 在获取数值,你最好可以给我们一个可以复现的步骤,否则没法验证你的这个问题。
另外你所谓的获取不到值是什么?query 的时候没有报错吗?
 

xiewh

赞同来自:

之所以我说没有获取到是值,我是用以下方法验证的,在最外层写 `doc['user_channel_id'].value` 是可以获取到值的(值为:1),但是在 `nested` 内写 `doc['user_channel_id'].value`  获取到的值为 0,但是我的的数据为 1,这也验证了我的查询条件,(条件为: 搜索 `analyze_info.text` 为 “xxx” 时 并且 `analyze_info.channel_id` 等于  `user_channel_id` ),查出来的数据都是 `user_channel_id = 0`
 
执行搜索的时候不会报错,如果把 `user_channel_id` 换成一个不存在的字段时,是会报错的
 
ES 版本信息:
 
```
"version": {
    "number": "5.5.0",
    "build_hash": "260387d",
    "build_date": "2017-06-30T23:16:05.735Z",
    "build_snapshot": false,
    "lucene_version": "6.6.0"
},
```
 

c.png

rockybean - Elastic Certified Engineer, ElasticStack Fans,公众号:ElasticTalk

赞同来自:

哦,我前面没仔细看,这是一个 nested query。nested object 在实现是独立的 object,与父文档时分离的,应该是没有办法在 nested 里面获取父文档字段的,也就是说 user_channel_id 这个字段你是没法在analyze_info 里面获取到的。有空我试下,理论上应该是不行的。
 
https://www.elastic.co/guide/e ... .html

要回复问题请先登录注册