有没有办法在查询中有条件地链接多个索引?

时间:2019-03-25 02:16:13

标签: elasticsearch

在集群中,我有两个索引,一个索引包含员工信息和组成员身份,另一个索引包含组信息,例如id,name,proxy_id等。它们分别称为员工索引和组索引。

我想构造一个查询,该查询将仅将文档返回给用户,前提是它们是正确组的一部分。不幸的是,文档将仅附有多个proxy_id之一。为了返回正确的文档,我的查询将需要检查用户索引并通过检查每个用户所属的组并针对当前文档检查每个代理地址来验证其组成员身份是否合适。

我知道这需要处于“必须”的条件之内,但是我不确定如何构造它或是否确实可能。

任何建议将不胜感激。谢谢!

这是针对运行Elastic 6.6的Elastic Search集群

2 个答案:

答案 0 :(得分:0)

elasticsearch中没有有效的联接方法,但是您可以将所需的信息添加到用户文档中。 您应该尝试尽可能denormalize数据。尝试将所需的所有信息存储在一个文档中-不在乎重复的数据。

答案 1 :(得分:0)

您可以添加多个索引..在节点js中说..类似这样的

elasticClient.search({
                         index: 'pubmed-index,biorxiv-index',
                          type: 'pubmed-paper,biorxiv-paper',
                         "size": 10,
                          body: {
                            "query": {
                              "bool": {
                                  "must": [

                                      {
                                          "query_string": {
                                              "query": `${searchKeyword}`,
                                              "default_operator": "AND",
                                              "fields":[]
                                          }
                                      },
                                      {
                                          "query_string": {
                                              "query": `${pubType[0]}`,

                                              "fields": [
                                                  "Publication Type"
                                              ]
                                          }
                                      },
                                       {
                                          "query_string": {
                                              "query": `${searchJournal}`,

                                              "fields": [
                                                  "Journal"
                                              ]
                                          }
                                      }

                                  ]
                                  ,
                                  "filter": [

                                      {

                                          "range": {
                                              "Date Revised": {
                                                  "gte":`${searchGreaterYear}`,
                                                  "lte": `${searchLesserYear}`,
                                                  "format": "yyyy"
                                              }
                                          }
                                      }
                                  ]
                              }
                          }
                      }
                        }).then(function (resp) {
                            console.log(searchPublicationType[0],searchLesserYear,searchGreaterYear,searchKeyword);
                            // return res.json(resp)
                        return res.json({source:resp.hits.hits,total:resp.hits})
                         // return res.json('Hi')
                        }, function (err) {
                            console.log(err.message);
                            return res.json(err.message)
                        })