solr服务器的搭建与使用

solr是java开发的一款基于luence的服务器,

一、搭建步骤

第一步:把solr 的压缩包上传到Linux系统

第二步:解压solr。 (默认bin下启动的为jetty容器启动  contrib目录为拓展包  docs为文档  dist下为war包solrj-lib)

第三步:安装Tomcat,解压缩即可。

第四步:把solr部署到Tomcat下。(dist下的war包)

第五步:解压缩war包。启动Tomcat解压,关闭tomcat并将原来的war包删除(如果不关闭就删除会导致解压的文件也会删除)

第六步:把/root/solr-4.10.3/example/lib/ext目录下的所有的jar包(日志包),添加到solr工程中。

[root@localhost ext]# cp * /root/solr-4.10.3/example/lib/ext     /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/

第七步:创建一个solrhome。/example/solr目录就是一个solrhome。复制此目录到/usr/local/solr/solrhome

/root/solr-4.10.3/example

[root@localhost example]# cp -r solr /usr/local/solr/solrhome

第八步:关联solr及solrhome。需要修改solr工程的web.xml文件。

 

第九步:启动Tomcat

http://192.168.25.154:8080/solr/

 

二、配置业务域

   1、把中文分词器添加到工程中

                         把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下

               把扩展词典、配置文件放到solr工程的WEB-INF/classes目录下。 

2、配置一个FieldType,制定使用IKAnalyzer(添加自己的分析器)

修改schema.xml文件

修改Solr的schema.xml文件,添加FieldType: 只有textField类型才能自定义分析器,所以class用solr.TextField

           

<fieldType name="text_ik" class="solr.TextField">
  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

3、配置业务域

type使用自定义的FieldType   设置业务系统Field  id不用写进去,type表示采用哪种分析器不用分析器的话选择哪种数据类型, stored是否存储,indexed是否成为检索对象

          

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>

这里注意如果为日期值,那么最好就成String然后将日期转为字符创传入 

四、使用solrj导入值

   首先在Spring生成bean对象,并调用构造方法

<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg index="0" value="http://192.168.25.131:8080/solr/collection1"></constructor-arg>
	</bean>

然后调用solrj操作提交索引 

@Autowired
	private SolrServer solrServer;
	public MessageInfo updateIndex() {
		MessageInfo messageInfo = new MessageInfo();
		//查询所有的维修记录  并添加到索引库
		try {
			List<UpdateIndexVo> list =repairDeclarationsurfaceMapper.findAllIndex();
			for (UpdateIndexVo vo : list) {
				SolrInputDocument document = new SolrInputDocument();
				document.addField("ri_equipmentCode", vo.getEquipment_Code());
				System.out.println(vo.getEquipment_Code());
				document.addField("ri_equipmentName", vo.getEquipment_Name());
				document.addField("ri_model_number", vo.getModel_Number());
				document.addField("ri_eqipment_type", vo.getEquipment_Type());
				document.addField("ri_department", vo.getDepartment());
				document.addField("ri_location", vo.getLocation());
				document.addField("ri_report_time", vo.getReport_Time());
				System.out.println(vo.getReport_Time());
				document.addField("ri_finish_time", vo.getFinish_Time());
				document.addField("ri_fault_sketch", vo.getFault_Sketch());
				document.addField("ri_repair_sketch", vo.getRepair_Sketch());
				document.addField("ri_fault_location", vo.getFaultLocation());
				document.addField("id", vo.getId());
				solrServer.add(document);
			}
			solrServer.commit();
			messageInfo.setStates(200);
			messageInfo.setMessage("索引库重建成功");
			messageInfo.setMessage("索引库重建成功");
		} catch (Exception e) {
			messageInfo.setMessage("索引库重建失败");
			messageInfo.setStates(204);
			e.printStackTrace();
		}
		return messageInfo;
	}

 

 提交成功后,后台查询与删除数据

点击query不输入条件 点击executre Query执行查询查询所有的数据,

 q的意思为  *:*  查询所有  id:45 表明查询id为45的

df(defaultFiled)为默认搜索域 如果在q中不写"*:*那么默认搜索text(在conf中solrconfig.xml中进行配置

删除数据点击documents 使用xml格式的

<delete>
<id>45</id>
</delete>
<commit/>

使用solrj查询数据:

query.set("q","*:*");  设置q的条件为"*:*" // 其他的也一样 默认记录数量就是10条

QueryResponse queryResponse = solerServer.query(query);//进行查询

SolrDocumentList solrDocumentList = queryResponse.getResults(); //获得文档列表,

solrDocumentList getNumFound();   //总数   也可以遍历 这个list就是一个arraylist  

 

对于自定义词汇如下

     在Tomcat下webapp下solr工程下的classes文件夹下

打开IKAnalyzer.cfg,xml文件

配置自己拓展文件的位置以及拓展停止字典的位置即可。字典里面每一个自定义字段一行即可

solr高亮显示

		for (SolrDocument solrDocument : solrDocumentList) {
			FindRepairDeclarationIntellignetVo vo = new FindRepairDeclarationIntellignetVo();
			//取参数
			vo.setRepairCode((String) solrDocument.get("ri_repairCode"));
			vo.setEquipment_Code((String) solrDocument.get("ri_equipmentCode"));
			vo.setEquipment_Name((String) solrDocument.get("ri_equipmentName"));
			vo.setModel_Number((String) solrDocument.get("ri_model_number"));
			vo.setEquipment_Type((String) solrDocument.get("ri_equipment_type"));
			
			RiDepartment riDepartment = RiDepartmentMapper.selectByPrimaryKey(Integer.valueOf((String)solrDocument.get("ri_department")));
			if(riDepartment!=null){
				vo.setDepartmentName(riDepartment.getDepartmentname());
			}
			
			vo.setLocation((String) solrDocument.get("ri_location"));
			vo.setReport_Time((String) solrDocument.get("ri_report_time"));
			vo.setFinish_Time((String) solrDocument.get("ri_finish_time"));
			vo.setId((String) solrDocument.get("id"));
			vo.setFaultLocation((String) solrDocument.get("ri_fault_location"));
			vo.setFaultpatternName((String) solrDocument.get("ri_fault_pattern"));
			
			vo.setRepair_Sketch((String) solrDocument.get("ri_repair_sketch"));
			vo.setFaultLocation((String) solrDocument.get("ri_fault_location"));
			
			vo.setFault_Sketch((String) solrDocument.get("ri_fault_sketch"));
			
			//对维修的内容有高亮取高亮
			Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
			Map<String, List<String>> map = highlighting.get(solrDocument.get("id"));
			
			List<String> list = map.get("ri_fault_sketch");
			if(list!=null&&list.size()!=0){
				String ri_fault_sketch = list.get(0);
				vo.setFault_Sketch(ri_fault_sketch);
			}
			List<String> list2 = map.get("ri_repair_sketch");
			if(list2!=null&&list2.size()!=0){
				String ri_repair_sketch = list2.get(0);
				vo.setRepair_Sketch((ri_repair_sketch));
			}
			
			List<String> list3 = map.get("ri_fault_location");
			if(list3!=null&&list3.size()!=0){
				String ri_fault_location = list3.get(0);
				vo.setFaultLocation(ri_fault_location);
			}
			IntellignetVoList.add(vo);
		}

条件组合查询

String params = "(title:笔记 OR content:笔记) AND catalog_id:2";
SolrQuery query = new SolrQuery();
query.setQuery(params);

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值