2014-10-18 82 views
0

这里是我的搜索对象:如何通过嵌入对象场弹性搜索过滤器

{ 
    "_index": "search", 
    "_type": "product", 
    "_id": "2", 
    "_version": 1, 
    "found": true, 
    "_source": { 
     "datePublished": "2014-01-01T00:00:00-08:00", 
     "published": true, 
     "name": "Winter Coat", 
     "description": "A nice warm winter coat. If you get cold with this on, you've probably done something wrong.", 
     "brand": { 
      "name": "Burton" 
     } 
    } 
} 

,这里是我试图执行查询:

$query = new Query\QueryString('*' . 'winter' .'*'); 
$boolFilter = new Bool(); 
$brandFilter = new Term(['brand.name' => 'Burton']); 
$boolFilter->addMust($brandFilter); 
$filtered = new Filtered($baseQuery, $boolFilter); 
return Query::create($filtered); 

,但我发现没有回来。我究竟做错了什么?

回答

0

经过一些试验和错误,我发现术语是一种有点不可靠的方式来做精确匹配,因为标记器。对于任何你想精确匹配的领域,你需要确保它不被分析。或者,您可以使用整数值(例如和对象ID)进行精确匹配。我最终在完全匹配的情况下使用了ID。