MySQL查询到ElasticSearch

我正在尝试将MYSQL查询转换为Elasticsearch。该查询包括在不同字段上的多个条件。让我解释一下我要达到的目标。我的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')

如何在Elasticsearch中复制此查询。我的尝试是

$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'],

]

]

]

]

]

];

但这不会返回任何内容。我正在使用Elasticsearch 7.6并尝试在Kibana上使用curl复制此查询,但答案仍然相同。

期待帮助

根据要求,索引的映射是

{

"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

}

}

}

}

}

}

}

我接受的文件是

 "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

}

}

回答:

您正在使事情变得复杂,并试图在Elasticsearch中适应MySQL概念。在这种情况下,您需要正确定义索引映射(根据搜索要求来字段数据类型及其分析器),并相应地构建查询。

我已经获取了您的示例,并且没有更改索引映射和示例文档,但是更改了搜索查询以显示如何处理现有数据和需求(可能无法在所有情况下都有效,但是您有所了解)搜索。

回答:

{

"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"

]

}

}

}

 "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

}

}

]

以上是 MySQL查询到ElasticSearch 的全部内容, 来源链接: utcz.com/qa/413775.html

回到顶部