我想使用elastica过滤类别中的多个匹配项:
类似于:
(categories.name =“类别-1”和categories.level = 0)和(categories.name =“类别-2”和categories.level = 1)
"title": "Test Product 1",
"categories": [
{
"id": 1,
"name": "category-1",
"title": "Category 1",
"level": 0
},
{
"id": 2,
"name": "category-2",
"title": "Category 2",
"level": 1
}
]我试过:
$matchQuery = new Query\Match();
$matchQuery->setField('categories.name', 'category-1');
//I don't know how to add AND categories.level = 0
$boolQuery1 = new Bool();
$boolQuery1->addMust($matchQuery);
$results = $record->search($boolQuery1)->getResults();发布于 2016-03-14 03:08:22
只需将布尔子句转换为JSON格式,即可直接传递给elasticsearch查询。我觉得这个应该管用。
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "categories",
"query": {
"bool": {
"must": [
{
"term": {
"categories.name": {
"value": "category-1"
}
}
},
{
"term": {
"categories.level": {
"value": "0"
}
}
}
]
}
}
}
},
{
"nested": {
"path": "categories",
"query": {
"bool": {
"must": [
{
"term": {
"categories.name": {
"value": "category-2"
}
}
},
{
"term": {
"categories.level": {
"value": "1"
}
}
}
]
}
}
}
}
]
}
}
}https://stackoverflow.com/questions/35978128
复制相似问题