我正在尝试索引和查询弹性搜索中的简单嵌套数据,但收到以下错误:
"filter":[]}}}]]]; nested: QueryParsingException[[products] [_na] query malformed, no field after start_object]; }]
我的映射是:
{
"product": {
"properties": {
"id": { "type": "integer", "store": true },
"description": { "type": "string" },
"kind": { "type": "string" },
"name": { "type": "string", "store": true },
"tags": {
"type": "nested",
"properties": {
"label": {
"type": "string",
"index": "not_analyzed",
"omit_norms": true,
"index_options": "docs"
},
"slug": {
"type": "string",
"index": "not_analyzed",
"omit_norms": true,
"index_options": "docs"
}
}
}
}
}
}
我在下面的查询中成功获得所有耳机:
{
"query": {
"filtered": {
"query": {
"bool": {
"must": {
"match": { "kind": "Headphone" }
},
"must_not": [],
"should": []
}
},
"filter": []
}
}
}
我的问题是,在支持方面时,找到“带XX标签的耳机”或“带XX和YY标签的耳机(另一种查询)”的正确查询结构是什么?
我只是尝试将下面的查询部分与上面的查询合并,但我找不到“正确”的地方(键)来放置它:
{
"nested": {
"path": "tags",
"filter": {
"bool": {
"must": {
"terms": {
"tags.slug": [ "discount", "black"],
"minimum_should_match": 1
}
}
}
}
}
}
答案 0 :(得分:0)
首先,映射似乎没有效果。例如,正确的映射应包含properties
而不是mapping
。确保通过运行实际应用映射
curl "localhost:9200/products/product/_mapping?pretty"
搜索请求在顶层缺少query
元素,而minimum_should_match
过滤器不支持terms
。因此,请求应如下所示:
{
"query": {
"nested": {
"path": "tags",
"filter": {
"bool": {
"must": {
"terms": {
"tags.slug": [ "discount", "black"]
}
}
}
}
}
}
}'