【问题标题】:Convert Mysql Query into Elastic search query将 Mysql 查询转换为弹性搜索查询
【发布时间】:2018-09-23 19:18:53
【问题描述】:

我正在研究弹性搜索,但不是制作弹性搜索查询的专家。在下面找到我的查询,如果可能的话,请转换为 elasticsearch 查询,然后提前感谢

SELECT
  `currency`.`id`                         AS `cur_id`,
  `currency`.`currency_name`              AS `cur_name`,
  `currency`.`currency_code`              AS `cur_code`,
  `currency`.`currency_slug`              AS `cur_slug`,
  `currency`.`logo`                       AS `cur_logo`,
  `currency`.`added_date`                 AS `cur_added_date`,
  `currency`.`mineable_or_not`            AS `mineable_or_not`,
  `currency`.`market_cap`                 AS `cur_market_cap`,
  `currency`.`circulating_supply`         AS `cur_circulating_supply`,
  `currency`.`max_supply`                 AS `cur_max_supply`,
  `currency`.`total_supply`               AS `cur_total_supply`,
  `currency`.`market_cap`                 AS `ng_cur_market_cap`,
  `currency`.`added_date`                 AS `ng_cur_added_date`,
  `currency`.`circulating_supply`         AS `ng_cur_circulating_supply`,
  `calculations`.`volume_1hour`           AS `cal_volume_1hour`,
  `calculations`.`volume_24hour`          AS `cal_volume_24hour`,
  `calculations`.`volume_168hour`         AS `cal_volume_168hour`,
  `calculations`.`volume_720hour`         AS `cal_volume_720hour`,
  `calculations`.`volume_24hour_btc`      AS `cal_volume_24hour_btc`,
  `calculations`.`current_price`          AS `cal_current_price`,
  `calculations`.`percentage_change`      AS `cal_percentage_change_24h`,
  `calculations`.`percentage_change_1h`   AS `cal_percentage_change_1h`,
  `calculations`.`percentage_change_168h` AS `cal_percentage_change_168h`,
  `calculations`.`volume_24hour`          AS `ng_cal_volume_24hour`,
  `calculations`.`current_price`          AS `ng_cal_current_price`
FROM `currency`
  JOIN `calculations` ON `calculations`.`currency_id` = `currency`.`id`
WHERE `calculations`.`update_status` = 1 AND `currency`.`currency_type` != 3 AND `calculations`.`update_status` = 1 AND `currency`.`status` = 1
ORDER BY `market_cap` DESC
LIMIT 100

【问题讨论】:

  • elasticsearch 中没有类似连接的行为。您可以同时查询两个索引。

标签: php elasticsearch nosql elasticsearch-5


【解决方案1】:

正如 eliasah 所说,弹性搜索中没有加入操作。

Joining queries

一般来说,您不能真正在 ES 中执行连接查询。您可以在同一索引下的文档上建立父/子关系,但这是我不会选择的。我最好的建议是对您的数据进行非规范化,并使每个文档尽可能“独立”。在这个特定示例中,一种可能的解决方案是将计算存储在货币中,您最终会得到如下查询:

{
  "_source": ["id", "logo", ..., "calculations.volume_1h","calculations.volume_24h",...],
  "query": {
    "bool": {
      "must":[   
        {
          "match":{
            "calculations.update_status":1
          }
        },
        {
          "match":{
            "currency_type":3
          }
        },
        {
          "match":{
            "status":1
          }
        }
      ]     
  },
  "sort" : [
    {
      "market_cap": {
        "order": "desc"
      }
    }
  ]
  "size":100
}

【讨论】:

  • 感谢您的回复。您能否还指导我有关弹性搜索查询生成器的任何工具或任何 MySQL 查询到弹性搜索查询的转换器以及任何帮助我编写弹性查询的文档。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
相关资源
最近更新 更多