我在创建对elasticsearch的查询时遇到了一个问题,该查询有很多条件。我的模型看起来像:
data class Product(
@Id
val id: String? = null,
val category: String,
val imagesUrls: List<String>,
@Field(type = FieldType.Double)
val price: Double?,
@Field(type = FieldType.Nested)
val parameters: List<Parameter>?
)
data class Parameter(
val key: String,
val values: List<String>
)
我想通过以下方式查询产品:
类别(例如 cars
)
价格(在2万到5万美元之间)
和参数->例如具有许多参数的产品,如键 capacity
价值观 4L
, 5L
和第二参数齿轮传动值 manual
我当前的查询如下所示:
GET data/_search
{
"size": 10,
"query": {
"bool": {
"must": [
{
"term": {
"category.keyword": {
"value": "cars"
}
}
},
{
"nested": {
"path": "parameters",
"query": {
"bool": {
"must": [
{"term": {
"parameters.key.keyword": {
"value": "Capacity"
}
}},
{
"term": {
"parameters.key": {
"value": "4L, 5L"
}
}
}
]
}
}
}
}
]
}
}
您能告诉我当参数键等于容量时如何过滤产品,并检查值列表是否包含其中一个值吗?
如何在一个查询中组合多个此类操作?
示例数据:
{
"category":"cars",
"name":"Ferrari",
"price":50000,
"parameters":[
{
"key":"capacity",
"values":"4L"
},
{
"key":"gear transmission",
"values":"automcatic"
}
]
}
2条答案
按热度按时间btqmn9zl1#
下面显示的搜索查询根据以下内容查询数据:
类别(例如汽车)
和参数->例如有很多参数的产品,比如4l、5l和手动二档变速器参数值
添加索引数据、Map、搜索查询和搜索结果的工作示例
索引Map:
索引数据:
搜索查询:
搜索结果:
gcmastyq2#
当您需要匹配列表中的任何一个时,您可以使用
terms
查询而不是term
. 从以下位置更新查询中的零件:下表:
请注意,如果parameters.key是analysed字段,并且该字段存在关键字子字段,则改用它。例如
parameters.values.keyword
你可以在这里阅读更多关于术语查询的内容。