【问题标题】:cURL Elasticsearch price comparison search aggscURL Elasticsearch 价格比较搜索 aggs
【发布时间】:2019-03-18 11:22:47
【问题描述】:

尝试使用 PHP cURL 实现对 Elasticsearch 索引的 jQuery/AJAX 即时搜索,该索引应按共享字段值对项目进行分组,并获取另一个字段值中可用的最低值。索引中的项目有 ID、名称、价格。几个项目将具有相同的 ID,名称略有不同,价格不同。搜索是针对名称字段的,并且应该将具有相同 ID 的项目分组,并获取最低价格(这是用于价格比较演示项目)。如何实现?我现在有以下内容,

... get search input $searchQuery with $_GET[] ...

$query = '{
    "query" : {
        "term" : { "name" : "'.$searchQuery.'" }
    }
}';

... cURL request curl_setopt($ch, CURLOPT_POSTFIELDS, $query) ...

搜索正常,但显示名称与搜索输入匹配的所有项目,这就是我需要这样做的原因

  • 按 ID 值分组(聚合?)
  • 获取任何可用的或第一个可用的名称
  • 获取分组商品的最低价格

...在搜索结果中仅显示一项,其中显示一项名称+最低可用价格。

这一切都可以用 ES 来完成,还是需要 PHP 来分组/获取必要的值?

谢谢

【问题讨论】:

    标签: php elasticsearch curl


    【解决方案1】:

    试试这个查询:

    $qyery = 
        '{
          "query": {
            "term": {
              "name": {
                "value": "'.$searchQuery.'"
              }
            }
          },
          "aggs": {
            "group_by_id": {
              "terms": {
                "field": "ID",
                "size": 10000
              },
              "aggs": {
                "min_price_in_group": {
                  "min": {
                    "field": "price"
                  }
                }
              }
            }
          },
          "size": 0
        }';
    

    【讨论】:

    • 感谢您的回复!无论我搜索什么,这都会给我完整的数据库结果(85k)。知道为什么吗?编辑:没关系现在看到一个错字。得到一个“默认情况下在文本字段上禁用字段数据”所以需要更改我认为的字段类型
    • 不幸的是,ID 可以同时包含数字和字符,例如 5578-AB1。你知道你的查询是否应该使用“field”:“ID.raw”吗?
    • 你能分享一下你在 Elasticsearch 中的字段映射吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2017-03-09
    相关资源
    最近更新 更多