我有一个生产订单的文件类型
即
{
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万条记录。
答案 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米加工零件编号
我已经测试过并且可以正常工作。