0

我正在尝试在弹性搜索上索引和查询简单的嵌套数据,但出现以下错误:

"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
                    }
                }
            }
        }
    }
}
4

1 回答 1

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"]
                        }
                    }
                }
            }
        }
    }
}'
于 2013-10-04T20:52:40.483 回答