我试图建立一个方面的导航使用elasticsearch为一个电子商务网站。
商店产品可以有多个变体。我想到的文档结构如下所示:
PUT /products_test/product/1
{
"id": "1",
"manufacturer": "foobar",
"categories": [
"28554568",
"28554577",
"28554578"
],
"variants": [
{
"id": "1_a",
"color": "blue",
"size": "L"
"price": "67.99"
},
{
"id": "1_b",
"color": "red",
"size": "L"
"price": "69.99"
}
]
}
我将变体定义为嵌套类型。这样,以下查询将返回包含匹配筛选器的变体的所有文档:
POST /products_test/product/_search
{
"query": {
"filtered": {
"query": {"match_all": {}},
"filter": {
"and": [
{"term": {"categories": "28554568"}},
{"terms": {
"variants.color": [
"red"
]
}}
]
}
}
}
}
现在,我真的希望获得与过滤器匹配的变体的id,以便在类别页面上显示该产品的变体。因此,在本例中,我希望返回第二个变量(1_b)的id。我只获取ResultSet中返回的文档的id。有什么方法可以从嵌套对象中定义一个值吗?
当前无法获取与查询匹配的嵌套文档。这是一个已知的问题,人们已经开始努力/思考来解决它。问题的当前状态是,Elasticsearch的获取阶段需要重构以支持该特性。
这很重要,而且将会发生,因为重构也将使elasticsearch的其他部分受益,但这是一个主要的重构。目前还没有预计时间。
我会考虑对您的数据进行非规范化处理,以便每个变体都包含“根对象”数据,然后在客户机内部进行分组。
或者,您可以调查父/子映射,但也适用类似的限制(无法确定哪个子匹配has_child
查询),但它确实提供了更多的灵活性,因为子是可以搜索的独立文档
问题内容: 我有一个包含嵌套对象的文档,如下所示: 现在,我需要按书名(不是book_title)和年份(比如2014)来过滤书籍。我需要的输出将是: 当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象? 问题答案: 您需要使用以下嵌套功能。 在输出中,您将确切地获得期望的结果,即字段和嵌套数组中的匹配书。
让我们想象一下Elasticsearch索引,其中每个文档代表一个国家。Country具有城市字段,该字段定义为嵌套的。 示例映射(为了本示例的简洁性而简化): 我插入到索引中的文档如下所示: 是否可以组成一个返回所有城市(所有国家)并支持排序的查询 第一个返回页面(回复)将包含捷克共和国的10个城市,第二个页面将包含10个城市,其中四个(最后一个)来自捷克共和国,六个来自斯洛伐克。 我正在研究复
问题内容: 我有两个结构: 它代表我的自定义PostgreSQL对象类型(我自己创建): 下一个结构是DB中的表: 我的自定义对象嵌套在Client类型中,名为。我尝试通过以下方式读取数据: 但不幸的是,我无法读取字段(具有默认值)。我不想使用google_account创建单独的表,也不希望将此结构作为客户端表中的单独字段或将其打包为json(创建单独的实体,因为该结构不仅在此表中使用,而且我正
我有一个索引,它有嵌套的字段。我想在响应中只包括特定的嵌套对象,基于条件以及其他字段。例如,考虑映射 我想按名称搜索用户,并希望响应只包括嵌套对象包含country='U.S.“。请考虑用户索引中的以下文档 我期待搜索结果如下 请为我提供一个合适的elasticsearch查询以获取此文档
问题内容: 是否可以使elasticsearch中的所有嵌套对象自动映射为默认嵌套的类型。而不是对象? 问题答案: 是的,您可以在创建索引时使用以下动态模板来做到这一点:
问题内容: 甲提供方法返回原语。是否有可能获得允许的物体?我正在检索的数据库字段可以为空,并且只要该字段为,就会返回我。 谢谢 问题答案: 只需检查该字段是否在使用。 或者,如果你能保证你使用正确的数据库列类型,以便真正返回(因而没有,或),那么你也可以强制转换它。 更新:对于Java 1.7+