如何在弹性搜索中按嵌入对象字段进行过滤

时间:2014-10-18 17:43:42

标签: elasticsearch elastica

这是我的搜索对象:

{
    "_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);

但我什么都没有回来。我做错了什么?

1 个答案:

答案 0 :(得分:0)

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