Elasticsearch地理位置维护及检索案例分享

Elasticsearch地理位置信息维护及检索案例分享

[size=large][b]1.准备工作[/b][/size]
参考文档《[url=https://my.oschina.net/bboss/blog/1556866]高性能elasticsearch ORM开发库使用介绍[/url]》导入和配置es客户端到工程

[size=large][b]2.定义带地理位置类型的mapping[/b][/size]
创建一个city索引表结构,字段location的 类型为geo_point,并且定义一个检索的dsl语句

在resources目录下创建文件esmapper/address.xml,内容如下:

<properties>
<property name="createCityIndice"><![CDATA[{
"settings": {
"number_of_shards": 6,
"index.refresh_interval": "5s"
},
"mappings": {
"city": {
"properties": {
"standardAddrId":{
"type":"keyword"
},
"detailName": {
"type": "text",

"fields": {
"keyword": {
"type": "keyword"
}
}
},
"cityName":{
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"countyName":{
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
},
"location":{
"type": "geo_point"
}

}
}
}
}]]></property>
<property name="locationSearch"><![CDATA[{
"size": 100,
"query": {
"bool": {
"must": [
{
"match_phrase_prefix" : {
"detailName" : {
"query" : #[detailName]
}
}

},
{
"geo_distance": {
"distance": #[distance],
"location": {
"lon": #[lon],
"lat": #[lat]
}
}
}
]
}
}
}]]></property>
</properties>

创建索引表

//创建加载配置文件的客户端工具,单实例多线程安全,第一次运行要预加载,有点慢
ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/address.xml");
try {
//先删除mapping
clientUtil.dropIndice("city");
} catch (ElasticSearchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//再创建mapping
clientUtil.createIndiceMapping("city",//索引表名称
"createCityIndice");//索引表mapping dsl脚本名称,在esmapper/address.xml中定义createCityIndice

[size=large][b]3.添加索引文档[/b][/size]
Map<String,String> params = new HashMap<String,String>();
params.put("cityName","潭市");
params.put("standardAddrId","38130122");
params.put("detailName","贵溪市花园办事处建设路四冶生活区4-11栋33单元1层1010");
params.put("location","28.292781,117.238963");
params.put("countyName","中国");
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
clientUtil.addDocument("city",//索引名称
"city",//索引类型
params);//索引数据对象
"refresh");//强制刷新索引数据,让插入数据实时生效,如果考虑性能需要,可以去掉refresh参数

[size=large][b]4.地理位置检索[/b][/size]
ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/address.xml");
Map<String,String> params = new HashMap<String,String>();
params.put("detailName","海域香廷160栋1单元3层302室");
params.put("distance","0.5km");
params.put("lon","115.824994");
params.put("lat","28.666162");
//返回map对象列表,也可以返回其他实体对象列表
ESDatas<Map> datas = clientUtil.searchList("city/_search","locationSearch",params,Map.class);
//返回json报文
System.out.print(clientUtil.executeRequest("city/_search","locationSearch",params));

[size=large][b]5.参考文档[/b][/size]
更多bboss 使用文档可以参考:
[url]https://my.oschina.net/bboss/blog/1556866[/url]
[size=large][b]6.开发交流[/b][/size]
bboss elasticsearch技术交流群:166471282

bboss elasticsearch微信公众号:
[img]https://static.oschina.net/uploads/space/2017/0617/094201_QhWs_94045.jpg[/img]
Elasticsearch是一个开源的分布式搜索和分析引擎,它被广泛应用于各种不同的领域和场景。以下是一些elasticsearch/elasticsearch 8的使用案例: 1. 日志分析:Elasticsearch可以用于实时收集、存储和分析大量的日志数据。通过将日志数据索引到Elasticsearch中,可以快速搜索和查询特定的日志信息,进行故障排查、性能监控等操作。 2. 搜索引擎:Elasticsearch提供了强大的全文搜索功能,可以用于构建搜索引擎。它支持复杂的查询语法和高亮显示等功能,可以快速地搜索和检索大量的文档数据。 3. 实时数据分析:Elasticsearch可以用于实时地分析和可视化大规模的实时数据。通过将实时数据索引到Elasticsearch中,可以进行实时的聚合、过滤和可视化操作,帮助用户快速了解数据的趋势和模式。 4. 地理位置搜索:Elasticsearch提供了地理位置搜索的功能,可以用于构建地理位置相关的应用。通过将地理位置信息索引到Elasticsearch中,可以进行附近搜索、范围搜索等操作,帮助用户找到附近的商家、地点等。 5. 电子商务:Elasticsearch可以用于构建电子商务平台的搜索功能。通过将商品信息索引到Elasticsearch中,可以实现快速的商品搜索、过滤和排序等操作,提升用户的搜索体验。 6. 监控和告警:Elasticsearch可以用于实时监控和告警系统。通过将监控指标索引到Elasticsearch中,可以实时地进行指标的聚合、过滤和告警操作,帮助用户及时发现和解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值