WebGIS中兴趣点简单查询、基于Lucene分词查询的设计和实现

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.前言

兴趣点查询是指:输入框中输入地名、人名等查询信息后,地图上可以展示出对应信息所在的地址,并且根据需求以不同方式展示出相关地址的属性信息等。

以百度地图为例:

                       

2.原理

所谓兴趣点查询,也就是前台输入描述信息后,后台根据该描述信息在地理数据库中查询到符合查询信息的地理数据和与此对应的属性数据,然后将数据返回给前台,前台进行展示。具体流程图如下:

 

3.数据采集

所谓巧妇难为无米之炊,地理相关数据的获取是该功能能否成功以及效果是否满足需求的核心。在实际项目中,地理数据的来源一般有以下几种方式:

a.公司自己或外包给其他公司进行兴趣点数据采集。

b.由甲方或者与甲方合作的第三方公司提供数据或者相应数据获取的API接口。此种方式下,为了后期扩展,如果可以将对方数据拉取存入己方设计好的相关表中,为最佳方式。

c.无数据来源,靠网络爬虫进行数据收集。

4.数据入库

当数据准备好后,我们最通常采用的方式就是对数据进行入库管理。

首先,需要根据具体业务需求,对兴趣点表进行符合实际情况的设计。

其次,便是对兴趣点表中数据的注入。常用的有两种方式,一种是将图层数据入库,然后在数据库中写存储过程将该入库数据进行组织后插入到兴趣点表中。第二种便是开发满足需求的小工具,然后利用小工具将图层数据组织后注入到兴趣点表中。

5.传统兴趣点查询的实现

最简单的实现方式,就是在兴趣点表建好后,直接对该表进行sql查询。根据需求,也可以选择使用Like等进行模糊查询。由于实际项目中的兴趣点数据基本不会过十万条,对表的优化没有很明显的要求。

以下是一个最简单的兴趣点表所包含的内容:

 

查询sql后就可以返回该兴趣点所在坐标和描述信息。

6.基于分词的兴趣点查询的实现

但是,如果用户输入的描述信息过于复杂呢,比如输入的是湖北省武汉大学,而我们数据库中只有武汉大学四个字的描述信息,那么用户将无法查到想要的信息。或者,用户输入的是汉语拼音呢?当然,目前有些数据库,比如Oracle是提供了拼音查汉字的函数,但是首先这不是所有数据库都有的功能,其次,同样存在对复杂拼音无法细分的情况。并且,数据库中LIKE是比较耗资源的,使用过多容易锁表。

那么,是否有更好的解决方案来解决这个问题呢?下面我将跟大家浅谈一下分词技术,和基于支持分词技术的Lucene的简单开发。

6.1中文分词和分词原理

吴军博士在其《数学之美》一书中,对语音识别(马尔科夫链)、信息度量(香农定理及延伸定理)等等搜索方面的知识进行了深入浅出的描述,虽然我不是研究搜索方面的人士,看后也是颇有收获。在此书中,他专门花了一个篇幅来讲解中文分词。此处我便对其中内容大致做一个总结。

 

6.1.1中文分词的难点

在科学家最开始研究分词技术时,提出的研究方法是利用文法、语义来进行分词。但是这种方法有两个重要的困难,一个是:数据量大,即想通过文法规则覆盖哪怕是20%的真实语句,文法规则的数量至少是几万条;第二个是:即使能够写出涵盖所有自然语言现象的语法规则集合,用计算机解析它也是相当的困难。

后来科学家又提出了统计方法来替代规则方法,即利用马尔科夫链来建立语言统计模型。

马尔科夫链是指:每个状态值取决于前面有限个状态。放在分词上便是,某种分词的方式,只跟其常用的几种分词方式的组合平率有关系。

但是语言统计模型用在中文分词上却又遇到了难题,因为中文并不像英文等每个词语之间有明显的空格分割,并且由于中文的文字意思多变概括力强大等等原因,导致了中文分词比英文分词难度大很多。

6.1.2中文分词方法的发展

6.1.2.1查字典法

把句子 “中国航天官员应邀到美国与太空总署官员开会。” 分成一串词:中国 / 航天 / 官员 / 应邀 / 到 / 美国 / 与 / 太空 / 总署 / 官员 / 开会。

 最容易想到的,也是最简单的分词办法就是查字典。这种方法最早是由北京航天航空大学的梁南元教授提出的。

 用 “查字典” 法,其实就是我们把一个句子从左向右扫描一遍,遇到字典里有的词就标识出来,遇到复合词(比如 “上海大学”)就找最长的词匹配,遇到不认识的字串就分割成单字词,于是简单的分词就完成了。

但是该方法在复杂语义上效果不好,后来在查字典方法上衍生出了最少词数分词法,不过该方法在语言二意上表现也不尽如人意。

6.1.2.2基于统计语言的符合嵌套法

利用以上提到过的马尔科夫链原理进行统计分词。对于语义定义不明确的词时,在分词时找到符合嵌套的结构。“ 北京大学”四个字,那么先把它当成一个四字词,然后再进一步找出细分词 “北京” 和 “大学”。

6.1.2.3依然存在的问题

在分词的一致性和分词的颗粒度上存在诸多困难。

6.2基于Lucene的兴趣点分词查询的设计和实现

6.2.1Lucene的分词原理

Lucene使用的是倒排文件索引结构,其过程是首先基于分词技术取得数据的关键字,然后基于关键字建立倒排索引。

举个例子,有两篇文章,分别是:

 

对内容简历索引后,得到的结果是:

 

6.2.2 设计产生分词索引的数据

     这里我们是指对兴趣表的设计。为了让分词中有多个关键字段(field),兴趣点表可以进行更加细化的设计。比如:

 

6.2.3 分词索引的创建

6.2.3.1 创建ResultSet

 

6.2.3.2 基于ResultSet建立索引文件

实例化索引器:

 

建立索引内容:

  

关闭索引,将索引写入硬盘:

   

 

6.2.3.3 基于索引的分词查询

   读入索引:

 

   查询关键字段信息的构造:

 

   开始查询:

 

6.2.3.4拼音查询的构造

 当上面的查询没有结果时,开启拼音查询:

 

 

6.3弊端

a.创建索引需要的时间比较长。

b.数据库中的数据更新时,并不能自动的触发索引文件的更新。同样索引文件的更新也是花费大量时间。

可以利用Spring提供的scheduling方法来进行定时触发更新:

 

7.前端展示

前端获得返回的数据后,首先根据XY在地图上标注出查询结果。同时将地理数据对应的属性数据展示在显示面板中。其他具体业务逻辑可以进行定制开发。

 

                                                                 -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                  

时间: 2024-09-28 10:48:34

WebGIS中兴趣点简单查询、基于Lucene分词查询的设计和实现的相关文章

(十一)WebGIS中要素(Feature)的设计

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在GIS中元素一般分为点元素,线元素,面元素以及symbol元素(特殊的点元素)等.与此对应,图层可以分为点图层,线图层,面图层以及标注图层等.从第9章到第10章,我给大家讲解了什么是矢量数据.矢量数据的来源.矢量数据的构造.以及矢量数据中的地理坐标与屏幕坐标之间的转换.在了解了这些概念和算法以及流程后,这一章我们将开始讲解设计出一个矢量图层前的最后一步,设

在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介

全文检索|索引 内容摘要: Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 从Lucene我们还可以学到什么 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全

如何在oracle存储过程中进行简单动态查询

在存储过程中做简单动态查询代码 ,例如: CREATE OR REPLACE procedure ZXM_SB_GZ_GET (p_table in varchar2, p_name in varchar2, p_value in varchar2, outpara out lntxdba.zxm_pag_cs_power.c_type ) as begin declare wherevalue varchar2(200): begin wherevalue:=select * from ||p

用基于lucene的web项目实现的简单的搜索引擎,出现线程抛出的空指针异

问题描述 用基于lucene的web项目实现的简单的搜索引擎,出现线程抛出的空指针异 解决方案 没有源代码没法看啊,ifIndexExist,索引不存在?你在搜索之前没有建立相关索引? 贴代码出来看看. 解决方案二: 你需要先建立索引. 你看看这个对你有帮助么 http://blog.csdn.net/sushengmiyan/article/details/7436057 解决方案三: 不好意思 ,帮不上你的忙 了,想了好久还是想不出

在jsp页面中显示lucene的查询结果,报错:org.apache.jasper.JasperException: Java heap space

问题描述 在jsp页面中显示lucene的查询结果,当返回hits的总数小于100时,可以正常显示,当结果大于100,会报如下错误:(但是在java环境下结果输出是正常的)exceptionorg.apache.jasper.JasperException:Javaheapspaceorg.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:433)org.apache.jasper.

(十九)WebGIS中I查询的原理及设计(包含AGS、GeoServer、Supermap)

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 我们在使用arcmap时,经常会用到被称为I查询的工具.具体功能便是,当激活I查询功能后,鼠标点击到某个要素上时,界面上会弹出一个对话框用来显示该要素的各属性信息.该功能截图如下:                         2.原理 在WebGIS中设计和实现该功能之前,我们有必要对该功能的原理做一个了解. 在OGC的WMS标准中规定了一个接口:Get

基于Lucene/XML的站内全文检索解决方案

xml|解决|全文检索 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明http://www.chedong.com/tech/weblucene.html 内容摘要:为Lucene做一个通用XML接口一直是我最大的心愿:更方便的在WEB应用中嵌入全文检索功能 提供了XML的数据输入接口:适合将原有基于各种数据库的数据源导入到全文索引中,保证了数据源的平台无关性: 通过了基于XML的搜索结果输出:方便了通过XSLT进行前台的结果显示:     MySQL  \ 

基于Lucene的Java搜索服务器Elasticsearch安装使用教程_java

一.安装ElasticsearchElasticsearch下载地址:http://www.elasticsearch.org/download/ ·下载后直接解压,进入目录下的bin,在cmd下运行elasticsearch.bat 即可启动Elasticsearch ·用浏览器访问: http://localhost:9200/   ,如果出现类似如下结果则说明安装成功: { "name" : "Benedict Kine", "cluster_nam

基于Lucene的图书全文搜索引擎

基于Lucene的图书全文搜索引擎 Baofeng Zhang@zju  转载请注明出处:http://blog.csdn.net/zbf8441372 背景介绍       这是一个关于图书的多侧面,多粒度的搜索引擎.仿照"读秀"(http://www.duxiu.com/)那样的搜索方式和搜索结果呈现方式,可以根据书的一些基本属性进行关键字搜索,展现的时候还附加进行了搜索结果的统计,也可以看到相关的全文信息.多侧面,多粒度的搜索和展示都是为了给用户更好的体验,方便用户的各种搜索需求