简体   繁体   English

Mysql 查询到 ElasticSearch

[英]Mysql query to ElasticSearch

I am trying to convert my MYSQL query to Elasticsearch.我正在尝试将我的 MYSQL 查询转换为 Elasticsearch。 The query includes multiple conditions on different fields.该查询包括针对不同字段的多个条件。 Let me explain what i am trying to achieve.让我解释一下我想要达到的目标。 My Mysql query is我的 Mysql 查询是

Select * from data_fl where city IN 'miami,miamibeach,etc' AND phone!=0 AND (name like '%abc%' OR address like '%abc%' OR zip_code like '%abc%' OR phone Like '%abc')

how this query can be replicated in elasticsearch.如何在 elasticsearch 中复制此查询。 My attempt is我的尝试是

$params = [
                              'index'=>'us_data_'.strtolower($state_code),
                              'body'  => [
                                  'query' => [
                                    'bool'=>[
                                        'filter'=>[
                                            'term'=>['city_code'=>$city_name]
                                        ],

                                      'should' => [
                                        'query_string'=>[
                                          'query'=>"*".$service."*",
                                          'fields'=>['name','contact_no','zip_code','city_code'],
                                        ]
                                      ]
                                    ]
                                  ]
                              ]
                    ];  

But this doesn't return anything.但这不会返回任何东西。 I am using Elasticsearch 7.6 and trying to replicate this query with curl on Kibana but the answer is still the same.我正在使用 Elasticsearch 7.6 并尝试在 Kibana 上使用 curl 复制此查询,但答案仍然相同。

Looking forward for help期待帮助

As requested the mapping of the index is根据要求,索引的映射是

{


"mapping": {
    "_doc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "@version": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "address": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "city_code": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "contact_no": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "date_added": {
          "type": "date"
        },
        "date_updated": {
          "type": "date"
        },
        "featured": {
          "type": "long"
        },
        "id": {
          "type": "long"
        },
        "location_id": {
          "type": "long"
        },
        "main_cate": {
          "type": "long"
        },
        "name": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "slug": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "source": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "state_code": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "status": {
          "type": "long"
        },
        "zip_code": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

The document which i accept is我接受的文件是

 "hits" : {
"total" : {
  "value" : 10000,
  "relation" : "gte"
},
"max_score" : 1.0,
"hits" : [
  {
    "_index" : "us_data_al",
    "_type" : "_doc",
    "_id" : "8kmR1HABkLcaz3xayZOg",
    "_score" : 1.0,
    "_source" : {
      "promotion" : null,
      "image" : null,
      "name" : "Port City Realty",
      "city_code" : "Mobile",
      "services" : null,
      "promotion_exp_date" : null,
      "tuesdayopen" : null,
      "tuesdayclose" : null,
      "wednesdayopen" : null,
      "thursdayclose" : null,
      "@timestamp" : "2020-03-13T15:44:45.330Z",
      "date_updated" : "2020-03-06T00:00:00.000Z",
      "mondayopen" : null,
      "contact_no" : "2516891228",
      "id" : 1941,
      "fridayclose" : null,
      "featured" : 0,
      "main_cate" : 1,
      "wednesdayclose" : null,
      "sundayopen" : null,
      "state_code" : "AL",
      "video" : null,
      "address" : "4826 Whispering Oaks Lane",
      "user_id" : null,
      "slug" : "2516891228-port-city-realty-mobile-al-36695",
      "timezone" : null,
      "source" : "USA Business",
      "description" : null,
      "fridayopen" : null,
      "price" : null,
      "saturdayopen" : null,
      "saturdayclose" : null,
      "date_added" : "2020-03-05T19:00:00.000Z",
      "thursdayopen" : null,
      "@version" : "1",
      "status" : 1,
      "mondayclose" : null,
      "zip_code" : "36695",
      "private_contact" : null,
      "location_id" : 0,
      "sundayclose" : null
    }
  }

You are complicating the things and trying to fit MySQL concept in Elasticsearch, In this case, you need to properly define your index mapping(fields data types and their analyzer based on the search requirements) and accordingly build your queries.您正在使事情复杂化并试图在 Elasticsearch 中适应 MySQL 概念,在这种情况下,您需要正确定义索引映射(字段数据类型及其基于搜索要求的分析器)并相应地构建您的查询。

I've taken your sample and didn't change your index mapping and sample document, but changed the search query to show, how with your existing data and requirement(may not work in all cases, but you gets an idea) it can bring the search.我已经采用了您的示例并没有更改您的索引映射和示例文档,而是更改了搜索查询以显示您现有的数据和要求(可能不适用于所有情况,但您有一个想法)它可以带来搜索。

Search query搜索查询

{
    "query": {
        "multi_match": { --> note and read about multi_match query
            "query": "36695",
            "fields": [
                "address",
                "city_code", --> add more fields if you need to be
                "zip_code",
                "contact_no"
            ]
        }
    }
}

Search result brings your sample doc:搜索结果带来您的示例文档:

 "hits": [
            {
                "_index": "so_mysql_dsl",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.2876821,
                "_source": {
                    "promotion": null,
                    "image": null,
                    "name": "Port City Realty",
                    "city_code": "Mobile",
                    "services": null,
                    "promotion_exp_date": null,
                    "tuesdayopen": null,
                    "tuesdayclose": null,
                    "wednesdayopen": null,
                    "thursdayclose": null,
                    "@timestamp": "2020-03-13T15:44:45.330Z",
                    "date_updated": "2020-03-06T00:00:00.000Z",
                    "mondayopen": null,
                    "contact_no": "2516891228",
                    "id": 1941,
                    "fridayclose": null,
                    "featured": 0,
                    "main_cate": 1,
                    "wednesdayclose": null,
                    "sundayopen": null,
                    "state_code": "AL",
                    "video": null,
                    "address": "4826 Whispering Oaks Lane",
                    "user_id": null,
                    "slug": "2516891228-port-city-realty-mobile-al-36695",
                    "timezone": null,
                    "source": "USA Business",
                    "description": null,
                    "fridayopen": null,
                    "price": null,
                    "saturdayopen": null,
                    "saturdayclose": null,
                    "date_added": "2020-03-05T19:00:00.000Z",
                    "thursdayopen": null,
                    "@version": "1",
                    "status": 1,
                    "mondayclose": null,
                    "zip_code": "36695",
                    "private_contact": null,
                    "location_id": 0,
                    "sundayclose": null
                }
            }
        ]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM