`

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

阅读更多
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微信公众号:
1
0
分享到:
评论

相关推荐

    Elastic Search搭建使用教程.pdf(内含ElasticSearch教程权威指南)

    Stack Overflow则利用Elasticsearch进行地理位置查询,并通过more-like-this接口查找相关的问题和答案;GitHub则使用Elasticsearch对大量的代码仓库进行搜索。这些应用案例都展示了Elasticsearch在全文搜索、结构化...

    elasticsearch数据库使用案例.docx

    如何高效地存储和检索地理位置信息,是当前亟需解决的问题。 **具体应用**: 1. **位置服务**:Uber 利用 Elasticsearch 来优化司机与乘客之间的匹配效率。 - **应用场景**:通过记录司机和乘客当前位置信息,并...

    elasticsearch实战

    通过这种层级结构,Elasticsearch能够高效地管理和检索数据。此外,本部分还介绍了如何使用Elasticsearch进行数据的索引和搜索,以及如何配置和优化Elasticsearch。 第三部分主要讨论了Elasticsearch的水平扩展能力...

    Elasticsearch分布式搜索模型的实际应用小案例

    数据存储和索引:Elasticsearch将数据存储在倒排索引(Inverted Index)中,使得数据可以被快速检索和分析。它支持多种数据类型,并提供了丰富的数据处理和查询功能。 RESTful API:Elasticsearch通过RESTful API...

    ElasticSearch5.2全网最全技术视频

    - **ES插件开发**:教授如何开发自定义插件来扩展Elasticsearch的功能。 #### 2.2 复杂项目实战 - **实战项目**:开发一款基于地理位置的智能餐厅App搜索引擎和数据分析系统。 - **应用高级知识点**:综合运用从...

    elasticsearch数据库下载、配置、使用案例

    ### Elasticsearch 数据库下载、配置与使用案例详解 #### 一、Elasticsearch 概述 Elasticsearch 是一款基于 Lucene 开发的分布式搜索引擎和分析系统,能够高效地处理大量数据,并提供快速的搜索响应。它支持多种...

    elasticsearch案例教程.zip

    **Elasticsearch 案例教程** Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其分布式、RESTful 风格的接口、实时性、可扩展性和高可用性而受到广泛欢迎。它不仅可以用于全文搜索,还常被用作数据分析和实时...

    es与solr的区别_solr_ES_es与solr的区别_elasticsearch_

    在大数据和搜索引擎领域,Elasticsearch (ES) 和 Apache Solr 都是广泛使用的开源技术,它们都基于 Lucene 库,提供高性能、可扩展的全文搜索和分析能力。然而,两者在设计哲学、使用场景、功能特性以及社区支持等...

    Elasticsearch顶尖高手系列-高手进阶篇

    随着大数据时代的到来,Elasticsearch因其高性能、易用性及可扩展性等特点,在企业级应用中占据了重要地位。本文旨在深入探讨Elasticsearch的高级特性与最佳实践,帮助读者成为Elasticsearch领域的顶尖高手。 #### ...

    Packt.Mastering.ElasticSearch.5.0.3rd.Edition.1786460181

    《Mastering Elasticsearch 5.0, 3rd Edition》是学习和精通Elasticsearch 5.0版本的重要资源,无论你是想提升搜索和分析能力,还是希望在大数据环境中构建高效的检索系统,这本书都将提供宝贵的指导和实践案例。...

    【54】2018年最新价值799元Elasticsearch顶尖高手系列:高手进阶篇视频教程 .txt

    综上所述,这份“2018年最新价值799元Elasticsearch顶尖高手系列:高手进阶篇视频教程”不仅包含了Elasticsearch的核心技术和高级特性,还提供了丰富的实战案例和技巧分享,非常适合那些希望深入了解Elasticsearch并...

    2018年最新价值799元Elasticsearch顶尖高手系列:高手进阶篇视频教程

    Elasticsearch 是一个基于 Lucene 的开源搜索和分析引擎,广泛用于全文检索、结构化数据存储以及实时数据分析等场景。随着大数据时代的到来,Elasticsearch 成为了许多企业和开发者首选的搜索解决方案之一。 #### ...

    Elasticsearch示例数据 logs.json shakespeare.json accounts.json

    例如,通过Elasticsearch,我们可以轻松地查找特定用户的活动记录,或者找出具有特定属性(如地理位置、注册日期等)的用户群体。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和...

    elasticsearch-cookbook-ebook.pdf

    - **定义**:Elasticsearch是一款基于Lucene的开源搜索和分析引擎,适用于各种文本、数字及地理位置等数据类型的搜索与分析。 - **特点**: - 高度可扩展:能够处理PB级别的数据量。 - 实时性:支持近实时的数据...

    Elasticsearch优点和缺点以及要点和难点具体应用.zip

    5. **多模态搜索**:除了文本搜索,Elasticsearch还支持数值、日期和地理位置等类型的搜索,满足多样化需求。 6. **数据分析**:通过聚合操作,Elasticsearch可以进行复杂的数据分析,例如统计、排序、分组等,是大...

    Elasticsearch全观测基数解析与应用.pdf

    Elasticsearch具备搜集、分析、存储数据的能力,可以高效处理多样的数据类型,实现复杂的查询与分析,因此广泛应用于信息检索和数据分析等场景。 在Elasticsearch的生态矩阵中,除了核心的Elasticsearch引擎外,还...

    PyPI 官网下载 | guillotina_elasticsearch-1.1.23-py3-none-any.whl

    在这个案例中,我们关注的是名为`guillotina_elasticsearch`的Python包,版本号为1.1.23。这个包以`.whl`文件的形式提供,这是一种预编译的Python轮子文件,可以直接在Python环境中安装,无需额外的编译步骤。 **...

    Mastering ElasticSearch 5.0

    - **Lucene**是Apache下的一个开源全文检索库,它是ElasticSearch的核心组件之一。 - **深入Lucene索引机制**:Lucene通过构建复杂的索引结构来实现高效的数据检索。 - **倒排索引(Inverted Index)**:将文档...

    《Elasticsearch 八大经典应用》独享大咖场景化应用的秘密.pdf

    - **地理坐标存储**:Elasticsearch支持地理坐标类型的字段,方便存储地理位置信息。 - **地理范围查询**:通过对地理坐标进行范围查询,可以快速找到指定区域内的数据。 - **地图可视化**:Kibana提供了丰富的地图...

    ElasticSearch 基础教程,包括基本概念安装和配置的详细信息

    由于其强大的可扩展性和高性能特性,ElasticSearch 被广泛应用于全文检索、日志分析、实时数据分析等领域。 - **分布式架构**:ElasticSearch 采用分布式设计,可以部署在多个服务器上,通过水平扩展提高系统性能。...

Global site tag (gtag.js) - Google Analytics