我正在尝试调查这是否是弹性搜索中的可能性,因为我想最好地解耦数据,我希望每个字段内都有index
个types
个。
问题1 :这个决定有多糟糕?
现在,如果我输入name
:
/myindex/name
{
"name" : "mat",
"id":1
}
和surname
/myindex/surname
{
"surname" : "txt",
"id":1
}
问题2 :如何创建name='mat AND surname='txt'
的搜索并返回id
?
如果我这样运行查询(在索引上,没有指定类型):
/myindex/_search
{
"query" : {
"bool" : {
"should" : [{
"term" : { "name" : "mat" }
},
{
"term" : { "surname" : "txt" }
}]
}
}
}
它返回(显然)两个文档,我可以说join by id
吗?
答案 0 :(得分:0)
如果你要使用ElasticSearch(或任何其他noSQL数据库),你真的需要改变你的心态"加入"。我们根本没有在noSQL中加入......总之......相反,你应该做的是在每条记录中放置重复的数据。
采用以下示例:假设我有一个产品,并且每个产品都有产品类型。
在SQL中,2条记录如下所示:
| Product ID | Product Name | Product Type ID |
| ---------- | ------------ | --------------- |
| 1 | product name 1 | 99 |
| 2 | product name 2 | 99 |
在elasticsearch中,我们会存储这样的数据:
products/product/1
{
"name": "product name 1",
"type: {
"type name": "product type 99"
}
}
products/product/2
{
"name": "product name 2",
"type: {
"type name": "product type 99"
}
}
请注意两行中的产品类型信息是如何重复的。作为一般规则,noSQL具有更快的优势,但代价是数据重复。这意味着更改名称"产品类型99"因为我需要在N条记录中更改它。
希望这有帮助。