如何通过一个查询从两个Elasticsearch索引查询

时间:2018-10-31 13:44:56

标签: elasticsearch

新手在这里。我有两个索引:/ items和/ categories包含与此类似的数据:

#Items:
{ id:1, name: "banana", categories: [1] },
{ id:2, name: "coconut", categories: [1] },
{ id:3, name: "smoothie", categories: [1, 2] }

#Categories
{ id:1, name: "Apple" },
{ id:2, name: "Banana" }

我想使用 bana 作为查询字符串来创建查询,并且我应该返回项目1和3。它不应返回类别对象。 ID 1是因为名称匹配,ID 3是因为其类别与名称匹配。

如何构造这样的查询?

我当前的查询不返回项3,就像

GET /items/_search
{
  "query": { 
    "bool":{
      "must":{
        "query_string":{
          "query":"bana"
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

是否有必要为此创建两个索引?也许直接在 Item 索引中使用name来替换ID:

{ id:1, name: "banana", categories: ["Apple"] }

由于索引将具有其自己的字典,因此不会引起额外的磁盘空间。

如果确实需要连接两个索引,也许您想尝试Parent-Child Relationship,但是将来会弃用,并替换为:join datatype,这样也可以将数据保存在一个索引中。