在this page的案例4中,查询会搜索所有低于70个单位的椅子:
curl localhost:9200/example/product/_search -d '{
"query": {
"filtered": {
"query": {
"match": {
"name": "chair"
}
},
"filter": {
"numeric_range": {
"size.height": {
"lt": 70
}
}
}
}
}
}'
结果:
"hits": [
{
"_id": "0",
"_source": {
"product": "chair",
"size": [
{
"width": 50,
"height": 50,
"depth": 50
},
{
"width": 75,
"height": 75,
"depth": 75
}
]
}
}
]
1)为什么两种椅子尺寸的ID都为0?
2)为什么响应显示另一把椅子的高度为75个单位?
答案 0 :(得分:0)
1)作者希望显示1到N的关系。这意味着他的存储库中有两种类型的椅子:尺寸为50的椅子和尺寸为75的椅子。但它们都是椅子,椅子的id是0。
2)因为默认情况下ES不会返回部分结果,所以它会返回文档。在我们的例子中,我们有一个带有大小数组的椅子文档,其中包含2个对象:一个用于50维,一个用于75维。提供的查询可以选择是否整个文档。
如果您想将查询转换为英语,您可以说:带给我所有具有价值的文件" chair"在产品领域中,至少有一个size.height值低于70.
尽管文章的作者知识渊博,但我必须说我不喜欢这种试图在SQL世界到NOSQL实现之间直接流动的文章。如果它如此简单,一些大公司会编写一个自动脚本,将您的SQL模式转换为各种NOSQL格式。为了在NOSQL中正确建模数据,您必须了解您的产品,了解应该影响您的决策的因素,了解用例和数据。没有一个通用的解决方案可以告诉你:如果你在RDBMS中这样做,就像在ES中这样做。