elasticsearch-文档类型之间的查询

时间:2018-06-19 22:26:10

标签: elasticsearch

我有一个生产订单的文件类型

{
  part_number: "abc123",
  start_date: "2018-01-20"
},
{
  part_number: "1234",
  start_date: "2018-04-16"
}

我想创建商品单据类型 即

{
  part_number: "abc123",
  commodity: "1 meter machining"
},
{
  part_number: "1234",
  commodity: "small flat & form"
}

生产订单每周都会存储数据,并且不可变。

另一方面,商品可能会随着时间而改变。即abc123可以从1米加工变为5米加工,所以我不想将这些数据与production_order记录一起存储。

如果用户在商品文档类型中搜索"small flat & form",我想从production_order文档类型中提取所有匹配的记录,匹配​​项在零件号之间。

很明显,我可以在具有联接的关系数据库中执行此操作。在Elasticsearch中可以做同样的事情吗?

如果有帮助,我们大约有50万个零件号将被商品化,并且我们的生产订单数据仓库目前拥有2000万条记录。

2 个答案:

答案 0 :(得分:0)

elasticsearch中不支持任何联接。

您可以先查询两次,方法是使用“小型平板和表格” 获取所有零件号,然后使用所有零件号查询其他索引。

否则,尝试找到一种将它们合并为单个索引的方法。那会更好。结合使用两者来更新商品不会给您带来任何问题。

答案 1 :(得分:0)

我发现您现在确实可以在elasticsearch中的索引之间查询,但是您必须确保数据正确存储。这是6.3 elasticsearch文档中的示例

  

术语查找twitter示例首先,我们为的信息编制索引   ID为2的用户(特别是其关注者),然后将来自   ID为1的用户。最后,我们搜索与   用户2的关注者。

PUT /users/user/2
{
    "followers" : ["1", "3"]
}

PUT /tweets/tweet/1
{
    "user" : "1"
}

GET /tweets/_search
{
    "query" : {
        "terms" : {
            "user" : {
                "index" : "users",
                "type" : "user",
                "id" : "2",
                "path" : "followers"
            }
        }
    }
}

这是原始页面的链接

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/query-dsl-terms-query.html

在上述情况下,我需要设置存储空间,以便商品是一个字段,其值是零件编号的数组。 即

{
  "1 meter machining": ["abc1234", "1234"]
}

然后我可以根据我的生产订单文件查找1米加工零件编号

我已经测试过并且可以正常工作。