首页 > 解决方案 > 将 Mysql 查询转换为弹性搜索

问题描述

关于我之前的问题ElasticSearch Query where mapping and doc sample is given 我想将此 MySql 查询转换为 Elasticsearch。这是mysql查询

Select * from us_data where phone!=0 AND city_code IN ('Homestead','Hialeah','Key Biscayne','Miami Beach','Miami','North Miami Beach','Ochopee','Opa Locka') AND state_code='FL' AND (name like '%appliance%' or city_code like '%appliance%' or address like '%appliance%' or phone like '%appliance%')

期待您的帮助

标签: mysqlelasticsearch

解决方案


下面的查询应该对您有所帮助。请注意,在您的映射中,您contact_no在上述查询中提到了phone.

尽管如此,我还是利用了contact_no它以使其与映射保持一致。

POST <your_index_name>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "city_code.keyword": [
              "Homestead",
              "Hialeah",
              "Key Biscayne",
              "Miami Beach",
              "Miami",
              "North Miami Beach",
              "Ochopee",
              "Opa Locka"
            ]
          }
        },
        {
          "term": {
            "state_code.keyword": "FL"
          }
        },
        {
          "multi_match": {
            "query": "*appliance*",
            "fields": ["name","city_code","address","contact_no"]
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "contact_no.keyword": "0"
          }
        }
      ]
    }
  }
}

我使用了术语查询术语查询多匹配查询的变体。

请注意,我在keyword字段上使用了 Term Query/Terms Query,因为从 sql-query 看来您想要完全匹配,而我已经multi-matchtext字段上使用过。

让我知道这是否有帮助!


推荐阅读