Elasticsearch中的精确匹配(Facet搜索)

时间:2016-07-02 10:53:41

标签: php elasticsearch aggregation

我计划将搜索和过滤引擎转换为Elasticsearch。通过查看大量文档,我发现elasticsearch具有创建方面的能力。我在左侧过滤器导航侧边栏中做了一些方面,并使用elasticsearch中的类别字段过滤它们来查询我的产品和方面。

但问题是我不知道如何回顾弹性搜索的选定方面。

我用过

'filter' => [
    'bool' => [
        'must' => [
            ['match_phrase' => [ 'Material' => 'Aluminum' ]],
            ['match_phrase' => [ 'Length' => '1/2']]
         ]
     ]
 ]

这个代码在elasticsearch php客户端的body标签中。它实际上有效,但我有其他产品长度为1 / 2-3或1 / 2-4。当我查询1/2时,弹性也会得到1 / 2-3和1 / 2-4,因为' 1 / 2-3'和' 1 / 2-4'还包含' 1/2'。

我想知道如何搜索并获得具有1/2而不是1 / 2-3或1 / 2-4的产品,我应该使用哪种查询?

谢谢!

注意:我知道Facets已被弃用。我正在使用这个词,因为我已经习惯了。它现在是Elasticsearch 2.3中的聚合。我正在使用该版本。*

1 个答案:

答案 0 :(得分:0)

得到我的解决方案!

我使用的是term方法而不是match_phrase。它完全符合我的需要。它搜索完全匹配未包含的匹配而不是match_phrase。 Match_phrase正在并排搜索精确的短语。

但是对于术语,您需要使用not_analyzed创建具有精确结果的字段。