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 に答える