鉴于以下ElasticSearch文档:
{
"_id": "3330481",
"_type": "user",
"_source": {
"id": "3330481",
"following": ["1", "2", "3", ... , "15000"]
}
}
对于给定的用户列表[" 50"," 51"," 52"]我想检查ID为3330481的用户遵循哪些用户列表由于她关注的是15000名用户,我不想获得整个列表,然后在本地查看。
有没有办法只检索相关用户?
答案 0 :(得分:2)
我不确定您是否可以从文档中获取子数组。
但是,实现此目的的一种方法是使用嵌套字段。您可以将following
字段的架构更改为nested
,如下所示。
{
"id": "3330481",
"following": [
{"userId":"1"}, {"userId":"2"},{"userId": "3"}, ... ]
}
然后您可以使用inner_hits检索数组中的匹配元素,如下所示。
{
"query" : {
"nested" : {
"path" : "following",
"query" : {
"terms" : {"following.userId" : ["50","51","53"]}
},
"inner_hits" : {
"size":0 // fetches all
}
}
}
}
答案 1 :(得分:0)
如果您只是想要使用["50", "51", "52"]
检索所有用户而没有影响分数,则可以将minimum_should_match与bool查询一起使用。例如:
{
"query" : {
"filtered" : {
"filter" : {
"bool": {
"must": {
"terms": {
"following": ["50", "51", "52"],
"minimum_should_match": 3
}
}
}
}
}
}
}