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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch地理位置信息维护及检索案例分享 1.准备工作 参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端到工程 2.定义带地理位置类型的mapping 创建一个city索引表结构,字段location的 类型为geo_point,并且定义一个检索的dsl语句 在resources目录下创建文件esmapper/address.
Elasticsearch地理位置信息维护及检索案例分享

1.准备工作
参考文档《 高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端到工程

2.定义带地理位置类型的mapping
创建一个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

3.添加索引文档
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参数

4.地理位置检索
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));

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

bboss elasticsearch微信公众号:
img_a21db47cf20ac4820026d60bcb2b9470.jpe
相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
71 6
|
4月前
|
存储 负载均衡 监控
检索服务elasticsearch节点(Node)
【8月更文挑战第23天】
64 5
|
4月前
|
存储 监控 负载均衡
检索服务elasticsearch集群(Cluster)
【8月更文挑战第23天】
71 3
|
4月前
|
存储 监控 负载均衡
检索服务elasticsearch分布式结构
【8月更文挑战第22天】
53 3
|
8天前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
226 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
4月前
|
网络协议 Java API
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
这篇文章介绍了如何在SpringBoot中整合Elasticsearch-Rest-Client,并提供了保存数据和进行复杂检索的测试示例。
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
|
3月前
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
|
4月前
|
SQL 存储 自然语言处理
检索服务elasticsearch全文搜索
【8月更文挑战第22天】
66 3
|
4月前
|
机器学习/深度学习 存储 搜索推荐
Elasticsearch与深度学习框架的集成案例研究
Elasticsearch 是一个强大的搜索引擎和分析引擎,广泛应用于实时数据处理和全文搜索。深度学习框架如 TensorFlow 和 PyTorch 则被用来构建复杂的机器学习模型。本文将探讨如何将 Elasticsearch 与这些深度学习框架集成,以实现高级的数据分析和预测任务。
45 0