【问题标题】:elasticsearch returning unique values弹性搜索返回唯一值
【发布时间】:2015-03-16 15:45:22
【问题描述】:

我有一个名为“类别”的字段。

我可以通过以下方式返回可能的类别列表:

$searchParams['body']['aggs']['category']['terms']['field'] = 'category'; 

但我想在该字段内进行搜索并仅返回与我的查询匹配的类别。

示例列表:

  1. 披萨
  2. 苹果派
  3. 橙派
  4. 纸杯蛋糕
  5. 汉堡

我想搜索“pie”,结果如下:

  1. 苹果派
  2. 橙派

有 200 多个类别。我想用 elasticsearch 的方式来做这个,而不是使用 MySQL 作为搜索。

感谢大家的帮助:)

【问题讨论】:

  • 我看不到任何 ElasticSearch 索引结构,也看不到您尝试过的查询。我错过了什么吗?

标签: elasticsearch


【解决方案1】:

聚合在"scope" of the query 中运行。因此,如果您对 "pie" 执行搜索查询,聚合将只会看到(和聚合)“饼图”文档。

$query = [
    'index' => 'my_index',
    'type' => 'my_type',
    'search_type' => 'count',  // <-- Note search_type = count, to ignore search hits
    'body' => [
        'query' => [
            'match' => [
                'category' => 'pie'
            ]
        ],
        'aggs' => [
            'category' => [
                'terms' => [
                    'field' => 'category'
                ]
            ]
        ]
    ]
];

$results = $client->search($query);

【讨论】:

  • 没错。但我会得到所有类别为饼的产品。我只需要根据我的查询找到不同的类别名称,在本例中为饼图。我会得到 50 个苹果派和 200 个橘子派。我只需要列表中的苹果派和橙派,而不是该类别的项目。
  • 哦,我明白了。在这种情况下,您可以使用 count 搜索类型,它只返回聚合结果(并且不返回搜索结果)。我将编辑我的答案以演示
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2023-03-09
  • 2021-07-21
  • 1970-01-01
相关资源
最近更新 更多