私はelasticsearchインスタンスでインデックス化したサンプル製品(2)のデータです。私が何をしたいか複数の条件でElasticsearchからデータを取得
[{
"type": "mobile",
"name": "iPhone 7s",
"price": 70000,
"brand_id": "100",
"spec": [{
"id": 200, // brand id
"value": "apple"
}, {
"id": 201, // color id
"value": "black"
}, {
"id": 202, // battery size id
"value": "2200"
}]
}, {
"type": "mobile",
"name": "Samsung Galaxy 5S",
"price": 50000,
"brand_id": "101",
"spec": [{
"id": 200,
"value": "samsung"
}, {
"id": 201,
"value": "silver"
}, {
"id": 202,
"value": "3200"
}]
}]
は「ブランドは」 'サムスン&「色」「銀」と等しいだろうすべての携帯電話のデータをフェッチする、です。
私はElasticsearchとの通信にPHPを使用しています。ここでは、すべての 'サムスン'携帯電話を弾力性から戻すサンプルのPHPスクリプトです。
$params = [
'index' => 'index name',
'type' => 'products',
'from' => $start,
'size' => $limit,
'body' => [
'query' => [
'bool' => [
'must' => [
'match' => [
'type' => 'mobile'
]
],
[
'nested' => [
'path' => "spec",
"score_mode" => "max",
'query' => [
'bool' => [
'must' => [
[
'match' => [
"spec.id" => 200
]
],
[
'match' => [
"spec.value" => 'samsung'
]
]
]
]
]
]
]
]
]
]
];
$result = $client->search($params);
しかし、「色」フィールドの条件を含める方法もわかりません。それで、私はすべての 'Samsung'の携帯電話を「黒い」色しか持たない。
まず、 'spec'フィールドが[' nested' type](https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html)であることを確認する必要があります。それは事実ですか? – Val
これは、インデックスのマッピング時にすでに行っています。 – mi6crazyheart