- 浏览: 171806 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
lb10001:
不错,正好需要这个知识
img src的特殊使用 -
923080512:
lz下面这句话写错了: Read Uncommitted ...
Spring事务隔离级别和传播行为 -
hucc:
good
img src的特殊使用 -
恶魔眼睛:
经常出现:
WARN | S-0:0:0:0:0:0:0:1 ...
pushlet 学习二 -
gaboolic:
ganqing1234 写道zhangyao 写道 retur ...
pushlet 学习二
项目里有一个查询模块,就是从特定的ftp站点扫描,然后利用solr来生成索引文件,提供查询下载服务。关于如何搭建和配置solr,参见 http://www.jinsehupan.com/blog/?p=25 和官方的文档,写的很详细。
这里具体讲讲在利用solr开发时需要注意的方面。
项目使用的是spring。项目中有一个solrService类,它主要负责对索引的操作,像新增索引,更新索引和删除失效的索引等。项目需要引入apache-solr-solrj-1.3-dev.jar、apache-solr-common-1.3-dev.jar、apache-solr-1.3-dev.jar三个包。
首先在spring的配置文件里面配置solrService类
<bean id="solrService" class="com.search.SolrService"> <property name="jdbcDAO" ref="genericJdbcDAO" /> <!-- solrURL --> <property name="solrURL" value="http://localhost:8080/solr" /> <!-- solr检索字段和数据库字段的对应关系,配置主键名,配置SQL --> <property name="sqlConfigMap"> <map> <!-- key: 需检索的主表(比如topic、article之类)对应的className service监听这些bean的更新事件并作更新索引处理 value: pkBoName: 主键在BO中的属性名(如id、userId等) sqlPart: 读取数据的SQL语句一部分,as成solr预定义名称 注意:WHERE条件最后要包含主键pk,且判断条件(>100之类)用“{SOLR}”代替,由service根据索引产生 如:where .... and id{SOLR} sqlCount: 读取数据的SQL语句对应的count(*)语句,加入这个是为了能分页(分次)取数据 注意项同sqlPart说明(判断条件用“{SOLR}”代替) pageSize: 分页读取时每页(每次)读取的记录条数,根据实际情况调整 sqlGetpk: 读取主键sid的SQL语句,加入这个是为了能同步删除的记录(对比数据表的id和solr存储的sid) // solr预定义类型: sid (solr内部唯一标识,sid生成方式为: {"去package的className"_"id"}) category (string), author (string), url (string), time (date), title (text与string的区别是text类型有分词), content (text不存储), keyword (text), summary (仅存储不索引 如果没有指定则根据content截断200字符生成), ip (string), size (slong), indextime (date 添加索引时间 默认为NOW) 此外支持如下*匹配(有存储有索引)类型: *_i (sint), *_s (string), *_l (slong), *_t (text) *_b (boolean), *_f (float), *_d (double), *_dt (date) 及以下*匹配(仅索引不存储)类型: *_ii (sint), *_is (string), *_il (slong), *_it (text) *_ib (boolean), *_if (float), *_id (double), *_idt (date) 及以下*匹配(仅存储不索引)类型: *_si (sint), *_ss (string), *_sl (slong) *_sb (boolean), *_sf (float), *_sd (double), *_sdt (date) 如: <entry key="com.wiscom.union.bo.Topic"> <bean class="com.wiscom.generic.base.search.SqlConfig"> <property name="pkBoName" value="id" /> <property name="sqlPart"> <value>SELECT t.id as sid, t.topic_title as title, u.username as author FROM t_topic t, t_user u WHERE t.userid=u.id AND t.id {SOLR} ORDER BY t.id</value> <property name="sqlCount" value="SELECT count(*) FROM t_topic WHERE id {SOLR}" /> <property name="pageSize" value="100" /> <property name="sqlGetpk" value="SELECT id as sid FROM t_topic WHERE 1=1" /> </property> </bean> </entry> 则保存到solr索引时,sid: {Topic_"id"} --> <entry key="com.wiscom.union.bo.File"> <bean class="com.wiscom.generic.base.search.SqlConfig"> <property name="pkBoName" value="id" /> <property name="sqlPart"> <value>SELECT f.id as sid, f.file_name as title, f.file_size as "size", f.file_time as time, f.category_id as c_i, ... FROM t_file f, t_site s, t_area a WHERE f.site_id=s.id AND a.id=s.area_id AND f.file_type=0 AND f.id {SOLR} ORDER BY f.id</value> </property> <property name="sqlCount" value="SELECT count(*) FROM t_file WHERE id {SOLR}" /> <property name="pageSize" value="1000" /> <!-- 一次最多操作的数目--> <property name="sqlGetpk" value="SELECT id as sid FROM t_file WHERE 1=1 ORDER BY id" /> </bean> </entry> </map> </property> </bean>
注释已经很详细了。sqlPart部分的as 什么什么,是在solr的配置文件schema.xml做的类型定义。这里需要注意的是solr对这些类型定义别名是区分大小写的,在使用oracle数据库时需要注意这个问题,因为oracle查询得到的列名都是大写的,大小写不一致会导致查询不到结果。
在solrService里以新增index文件为例。首先是要从数据库中得到相应的数据,然后使用SolrInputDocument来生成要提交的doc文档对象。
... // 生成doc SolrInputDocument doc = new SolrInputDocument(); doc.addField(fieldName, fieldValue); docsList.add(doc); ... // solrURLURL 为URL对象 SolrServer server = new CommonsHttpSolrServer(solrURLURL); server.add(docsList); // 提交 server.commit(); ...
solr虽然是基于lucene,但是在处理更新操作时是不同的,lucene没有更新操作,只能先将相应的索引删除,然后再添加新的索引。solr则不需要这么做,如果提交的doc的主键已经存在则会做更新操作,不需要我们自己做什么工作,所以更新操作和新增是一样的。我们的做法是在做ftp爬虫时区分哪些数据是更新的,哪些数据是删除的,然后把它们的主键提交到索引文件里,当solr的程序启动时,根据这些主键来对索引进行相应的操作。
删除操作方法如下:
server.deleteById(id); //根据索引的主键删除 server.deleteByQuery("sid:SoLRdelPkS@*"); // 根据查询删除 server.commit();
最后需求注意的问题是中文的查询问题,中文分词可以采用庖丁分词,网上有很多介绍。这里有个问题是在Linux下使用tomcat做容器时,在提交中文时会出现乱码的问题。最终使用的resin才解决了问题 。
在分析查询结果是采用的是SAXReader包。
// url包含有查询条件 如"...?q=hello&start=100&wt=xml" Document document = saxReader.read(url);
然后就可以对document进行分析得到相应的filed。
发表评论
-
《how tomcat works》读书笔记
2012-02-09 15:39 1520一 简单web服务 客户 ... -
Xpath使用,从 Java 程序中查询 XML
2011-12-14 09:45 1469转自:http://www.ibm.com/de ... -
从google code获取源码
2011-10-14 16:03 1879最近想学习python,找到了jaikuengine项目,一个 ... -
CXF几种客户端调用性能
2011-09-21 12:26 8124转自:http://blog.csdn.net/li ... -
java 路径、className.class.getResourceAsStream()、ClassLoader.getSystemResourceAsStr
2011-09-17 15:34 0className.class.getResourceAs ... -
java classLoader 体系结构
2011-09-17 15:27 1010java classLoader 体系结构 发表于:20 ... -
Jar命令 Manifest.mf的用法
2011-08-02 16:27 2228转自: http://hi.baidu.com/echo ... -
Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
2011-07-28 14:45 6157转自: http://blog.csdn.net/red ... -
白痴理解的SOAP/Web Service/WSDL关系
2011-07-27 17:01 1277转自: http://www.cnblogs.com/z ... -
JNDI 介绍
2011-04-09 20:12 1607转自http://blog.csdn.net/zhao ... -
Nutz源码之 Ioc 加载
2011-01-30 15:09 0Ioc 即为控制反转,放在spring里面叫 依赖注入,其实就 ... -
nutz源码 mvc 之 视图解析
2011-01-27 11:36 3483nutz的视图主要是通过con ... -
nutz源码 mvc 之 url与controller 映射
2011-01-22 15:57 2725mvc框架的一个重要的作用就是根据用户的url请求,来调用相应 ... -
nutz源码之aop实现
2011-01-10 10:13 0jjj -
pushlet 学习三 跨域实现
2010-11-02 20:14 0pushlet 的 ajax.js 是以ajax 轮询来实现 ... -
pushlet 学习二
2010-11-02 20:09 5302pushlet 的官网上有很多例子,可以参见http:/ ... -
java 反射机制
2009-02-07 15:01 0RTTI(运行时类型检查)同reflection的真正区别在于 ... -
servlet的session管理
2009-01-09 14:53 1862在servlet里调用httpsession方法是 reque ... -
Spring--quartz中cronExpression配置说明
2008-12-12 13:48 1125Spring--quartz中cronExpression配置 ... -
java volatile关键字
2008-12-01 16:46 1358最近看LumaQQ的源码发现一个volatile(中文意思是“ ...
相关推荐
slor定时增量更新索引dataimport.properties
查询该集合也是通过 http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提 供一套强大Data Schema来定义字段,类型和设置文本...
采用servlet的方式对分词库进行动态更新,请求servlet对分词库进行修改
1. **Solr Core**:Solr Core是Solr的基本工作单元,每个Core可以独立地处理索引和查询任务。它可以看作是一个独立的搜索引擎实例,有自己的索引和配置。在SolrCloud模式下,Core的配置存储在Zookeeper中,增强了...
- 安装完成后,建议进一步配置Solr,例如增加索引字段、优化搜索结果等。 通过以上步骤,我们可以在Linux环境下成功搭建起Solr服务,并进行基本的测试验证。对于初学者来说,这是一个很好的实践项目,可以帮助理解...
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的...用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
- `id`和`title`字段是在`Solr_Home\collection1\conf\schema.xml`中定义的field,这些字段的属性决定了索引方式和检索行为。 2. **查询示例:** - 选择“Query”,输入查询条件,如`*:*`代表查询所有文档。 - ...
如果ES发生故障,它可以利用这个网关(或者说是“可用性系统”)从上一次的状态中恢复索引数据。这对于需要保证服务稳定性和数据不丢失的应用场景非常关键。特别是对于使用云服务的用户来说,ES支持将S3作为网关,...
配置Core索引MySQL数据需要三个步骤:首先,需要将数据库驱动jar包放到Solr安装根目录下的server\solr-webapp\webapp\WEB-INF\lib目录下;其次,需要将Solr安装根目录下的/dist文件夹下的solr-dataimporthandler-x.x...
solr-analysis-5.2.1.jar需要的朋友请下载
Solr安装,配置及使用说明 已级对主要文件data-config.xml说明
同时,Solr提供插件机制,用户可以自定义查询解析器、过滤器、请求处理器等,实现功能扩展。 10. **监控与管理**:SolrAdmin是Solr内置的Web界面,用于监控和管理Solr实例,包括查看统计信息、加载和删除索引、测试...
它提供了高级的索引和查询功能,支持多种数据源,并且能够处理大量的并发请求。在处理中文文本时,Solr需要特定的中文解析器来正确地分词和理解语义,以实现有效的全文搜索。"solr中文解析器以及使用文档"这个主题...
在Solr环境中,ik-analyzer作为Analyzer类的实现,用于在索引和查询阶段进行文本预处理。通过配置Solr的schema.xml文件,可以轻松集成ik-analyzer,提升搜索性能。例如,我们可以在字段类型定义中设置Analyzer为"org...
Spring Data Solr project 集成了 Apache Solr 搜索引擎。它提供了自身的 MappingSolrConverter 以替代 DocumentObjectBinder ,Spring Data Solr 可以处理继承以及使用自定义类,例如 Point 或 DateTime。...
在Windows或Linux环境下,Solr的搭建主要包括以下步骤:下载Solr二进制包,解压,配置Solr核心,启动Solr服务器,并通过Web界面管理索引和查询。 **Spring**: Spring是一个全面的Java企业级应用开发框架,它简化了...
7. **响应式设计**:理解移动优先的策略,运用媒体查询进行不同设备的适配。 8. **版本控制**:使用Git进行代码版本管理和协同开发。 9. **Web安全**:基本的XSS、CSRF攻击防范以及HTTPS的重要性。 在这个项目中,...
14. 其他特色功能:包括大数据API数据分析、第三方认证中心数据同步、SLOR数据检索、安全域管理、安全认证转发、访问负载均衡和敏感数据扫描等,进一步提升大数据环境的安全性和效率。 总结来说,这个大数据安全...