【发布时间】:2021-02-04 17:05:12
【问题描述】:
我有 2 个索引,一个存储 用户,一个存储 文章。
用户文档:
{
"id" : "152ce52d-e975-4ebd-849a-0a12f535e644",
"email": "bob@email.com",
...
}
索引映射:
{
"mapping": {
"properties": {
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"email": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
文章文档:
{
"articleId" : "002ce52d-e975-4ebd-849a-0a12f535a536",
"userId": "152ce52d-e975-4ebd-849a-0a12f535e644",
...
}
索引映射:
{
"mapping": {
"properties": {
"articleId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"userId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
我正在尝试创建一个多索引查询,它返回所有没有文章的用户。
我不知道如何从第一个索引中排除包含在第二个索引中且具有相同 id/userId 字段的项目。
假设我有以下用户和文章:
用户:
[
{
"id": "user1",
"email": "bob@email.com"
},
{
"id": "user2",
"email": "john@email.com"
},
{
"id": "user3",
"email": "tom@email.com"
},
{
"id": "user4",
"email": "ben@email.com"
}
]
文章:
[
{
"articleId": "id1",
"userId": "user1"
},
{
"articleId": "id1",
"userId": "user2"
}
]
作为查询的结果,我想要所有没有文章的用户:
[{
"id": "user3",
"email": "tom@email.com"
},
{
"id": "user4",
"email": "ben@email.com"
}]
【问题讨论】:
-
您能否分享您的索引映射和示例预期搜索结果?
-
@Bhavya 使用索引映射和预期结果编辑了描述,谢谢!
-
您想要做的是类似于 SQL 中的 JOIN 查询,这在弹性搜索中不受支持。您将需要两个查询,一个用于获取拥有文章的用户的 ID,另一个用于排除在您的用户索引中具有相同 ID 的用户。另一种选择是非规范化您的数据并只有一个索引。
标签: elasticsearch elasticsearch-5 elasticsearch-aggregation elasticsearch-dsl