solr搜索引擎

一、solr目录简介

  • bin: Windows及Linux下的可执行文件

  • contrib: solr扩展库(solr的一些贡献软件/插件,用于增强solr的功能)

  • dist : solr编译(build)过程的jar包文件,以及相关的jar包引用

  • docs:API文档

  • example : solr的工程例子

  • licenses : 和solr相关的一些许可信息

  • server: solr web应用(webapps)相关配置(什么lib啊、conf啊、web.xml啊...)

二、solr整合tomcat  

  1. solr执行环境
  • solr需要运行在servlet容器中,Solr4.10.3要求jdk使用1.7以上,solr默认提供Jetty(java写的servlet容器)。本次受用tomcat:环境如下

  • (1)、Solr:solr4.10.3

  • (2)、jdk:jdk1.8

  • (3)、tomcat:8.0 

    2.solr整合tomcat需要三部

  • 1、将solr.war包复制到tomcat下的webapps文件夹下并解压,然后删除war包

  • 2、将solr下的example->lib-->下的依赖包复制到tomcat下webapps下solr文件夹下的lib下

  • 3、新建文件夹,将solr下example-->ext-->solr->下的所有文件复制到新建文件夹下,并且修改tomcat下的webapps下的solr文件夹下的web.xml文件  
<env-entry>
       <env-entry-name>solr/home</env-entry-name>
    	<!-- solr家的地址 -->
       <env-entry-value>D:\Program Files\solr\solrHome</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
 </env-entry>

   3.solr中solrhome家中collection1(盒)中schema.xml中域的解析

标签说明默认值
filed表示域 
name表示域名 
type表示域的类型 
indexed字段值是否用于查询true
stored字段真实值是否可以被查询到true
required是否拒绝空值的字段false
multiValued表示是否多值false
fieldType表示类型 
dynamicField表示动态域 
copyField拷贝域 
 <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 
 <fieldType name="string" class="solr.StrField" sortMissingLast="true" />

4.IK分词解析器配置

  • IKAnalyzer2012FF_u1.jar放入到tomcat下solr下的lib文件夹下

  • 将分词解析器的配置文件放入到编译后的文件夹下(和lib同级下的classes文件夹下)

  • 在solrHome下的collection1下的schema.xml中配置分词域

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

	<field name="title_ik" type="text_ik" indexed="true" stored="true" />
	<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true" />

 5.批量导入数据

将Solr-->dist-->solr-dataimporthandler-4.10.3.jarsolr-dataimporthandler-extras-4.10.3.jar复制到solrHome-->collection1-->lib下(如果美哟lib就创建)同时放入mysql驱动到此文件夹下

在solrConfig.xml中配置批量导入

<!-- 配置批量导入 -->
   <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
		<lst name="defaults"> 
			<str name="config">data-config.xml</str>
		</lst>
   </requestHandler>

在同级目录下创建data-config-xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>   
<dataSource type="JdbcDataSource"   
 driver="com.mysql.jdbc.Driver"   
 url="jdbc:mysql://localhost:3306/solr"   
 user="root"   
 password="123456"/> 
<document>
	<entity	name="green" query="SELECT Greens_ID,Greens_Type_Name,Greens_Name,Greens_Unit,Greens_Preiod,Greens_Number,Greens_Price,Greens_Market_Price,Greens_Minnumber,Greens_Class,Greens_Remark,Greens_Time,Greens_tupian,Greens_Stop,Greens_BigName FROM greens">
		<field column="Greens_ID" name="id"/>
		<field column="Greens_Type_Name" name="greensTypeName"/>
		<field column="Greens_Name" name="greensName"/>
		<field column="Greens_Unit" name="greensUnit"/>
		<field column="Greens_Preiod" name="greensPreiod"/>
		<field column="Greens_Number" name="greensNumber"/>
		<field column="Greens_Price" name="greensPrice"/>
		<field column="Greens_Market_Price" name="greensMarketPrice"/>
		<field column="Greens_Minnumber" name="greensMinnumber"/>
		<field column="Greens_Class" name="greensClass"/>
		<field column="Greens_Remark" name="greensRemark"/>
		<field column="Greens_Time" name="greensTime"/>
		<field column="Greens_tupian" name="greensTupian"/>
		<field column="Greens_Stop" name="greensStop"/>
		<field column="Greens_BigName" name="greensBigType"/>
	</entity>
</document> 
</dataConfig>

在schema.xml文件中配置域

<!-- 配置分词器 -->
	<fieldType name="text_ik" class="solr.TextField">
		<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
	</fieldType>

	<field name="title_ik" type="text_ik" indexed="true" stored="true" />
	<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true" />
	<!-- greens -->
	<field name="greensTypeName" type="text_ik" indexed="true" stored="true"/>
	<field name="greensName" type="text_ik" indexed="true" stored="true"/>
	<field name="greensUnit" type="string" indexed="false" stored="true"/>
	<field name="greensPreiod" type="string" indexed="true" stored="true"/>
	<field name="greensNumber" type="int" indexed="false" stored="true"/>
	<field name="greensPrice" type="float" indexed="false" stored="true"/>
	<field name="greensMarketPrice" type="float" indexed="false" stored="true"/>
	<field name="greensMinnumber" type="int" indexed="false" stored="true"/>
	<field name="greensClass" type="text_ik" indexed="true" stored="true"/>
	<field name="greensRemark" type="text_ik" indexed="true" stored="true"/>
	<field name="greensTime" type="string" indexed="true" stored="true"/>
	<field name="greensTupian" type="string" indexed="true" stored="true"/>
	<field name="greensStop" type="int" indexed="false" stored="true"/>
	<field name="greensBigType" type="text_ik" indexed="true" stored="true"/>

	<!-- 拷贝域 -->
	<field name="greens_keywords" type="text_ik" indexed="true" stored="false" multiValued="true" />

	<copyField source="greensTypeName" dest="greens_keywords"/>

	<copyField source="greensName" dest="greens_keywords"/>

	<copyField source="greensClass" dest="greens_keywords"/>

	<copyField source="greensRemark" dest="greens_keywords"/>

	<copyField source="greensBigType" dest="greens_keywords"/>

三、客户端solrj

1、导入jar包

  • 将D:\Program Files\solr\solr-4.10.3\dist文件夹下的solr-solrj-4.10.3.jar包导入到项目中

  • 将D:\Program Files\solr\solr-4.10.3\dist\solrj-lib下的所有jar包导入到项目中

  • 将D:\Program Files\solr\solr-4.10.3\example\lib\ext下的所有jar包导入到项目中

2、solr添加操作

  • solrj批量添加

/**
	 * solrj添加操作
	 * @throws SolrServerException
	 * @throws IOException
	 */
@Test
	public void addTest() throws SolrServerException, IOException{
		GreensDaoImpl dao = new GreensDaoImpl();
		String baseURL = "http://localhost:8080/solr/collection1";
       // String baseURL = "http://localhost:8080/solr/collection2";
		
		List<Greens> all = dao.findAll();
		for (Greens greens : all) {
			SolrServer solrServer = new HttpSolrServer(baseURL);
			//System.out.println( greens.getGreens_ID());
			SolrInputDocument sid = new SolrInputDocument();
			sid.addField("id", greens.getGreens_ID());
			sid.addField("greensTypeName", greens.getGreens_Type_Name());
			sid.addField("greensName", greens.getGreens_Name());
			sid.addField("greensUnit", greens.getGreens_Unit());
			sid.addField("greensPreiod", greens.getGreens_Preiod());
			sid.addField("greensNumber", greens.getGreens_Number());
			sid.addField("greensPrice", greens.getGreens_Price());
			sid.addField("greensMarketPrice", greens.getGreens_Market_Price());
			sid.addField("greensMinnumbera", greens.getGreens_Minnumber());
			sid.addField("greensClass", greens.getGreens_Class());
			sid.addField("greensRemark", greens.getGreens_Remark());
			sid.addField("greensTime", greens.getGreens_Time());
			sid.addField("greensTupian", greens.getGreens_tupian());
			sid.addField("greensStop", greens.getGreens_Stop());
			sid.addField("greensBigType", greens.getBigType());
			solrServer.add(sid);
			solrServer.commit();
		}
	}

3、solrj删除操作

/**
	 * solr删除操作
	 * @throws IOException 
	 * @throws SolrServerException 
	 */
	@Test
	public void deleteTest() throws SolrServerException, IOException{
		String baseURL = "http://localhost:8080/solr/collection1";
		SolrServer solrServer = new HttpSolrServer(baseURL);
		solrServer.deleteByQuery("*:*", 1000);
	}

4、solrj修改操作

/**
	 * solrJ修改操作
	 */
	@Test
	public void updateTest(){
		String baseURL = "http://localhost:8080/solr/collection1";
		SolrServer solrServer = new HttpSolrServer(baseURL);
		/**
		 * 与添加相同,只要id相同为修改操作,id不同为修改操作
		 */
	}

5、solrj查找操作

/**
	 * solrj查找操作
	 * @throws SolrServerException 
	 * "id": "3",
        "greensTypeName": "叶菜类",
        "greensName": "娃娃菜",
        "greensUnit": "包",
        "greensPreiod": "3日",
        "greensNumber": 10000,
        "greensPrice": 5,
        "greensMarketPrice": 6,
        "greensMinnumbera": 1,
        "greensClass": "兰州",
        "greensRemark": "质保期8小时",
        "greensTime": "2019-08-15 03:48:37",
        "greensTupian": "娃娃菜(包).jpg",
        "greensStop": 0,
        "greensBigType": "新鲜蔬菜",
	 */
	@Test
	public void queryTest() throws SolrServerException{
		String baseURL = "http://localhost:8080/solr/collection1";
		SolrServer solrServer = new HttpSolrServer(baseURL);
		/**
		 * 需求:
		 * 查询关键词为肉,过滤条件为猪肉,价格排序,分页,开始行,每页显示的条数,高亮显示,默认域,只查询指定域
		 */
		SolrQuery  solrParams = new SolrQuery(); 
		//关键词
		//solrParams.set("q", "greensName:肉");
		solrParams.setQuery("肉");
		//过滤条件
		solrParams.set("fq", "greensTypeName:猪肉");
		//价格排序
		//solrParams.set("fq", "greensPrice:[* TO 10]");
		//对价格排序
		solrParams.addSort("greensPrice", ORDER.desc);
		//分页
		solrParams.setStart(0);
		solrParams.setRows(5);
		//默认域
		solrParams.set("df", "greens_keywords");
		//只查询指定域
		solrParams.set("fl", "id,greensTypeName,greensName,greensPrice,greensClass,greensRemark,greensBigType");
		//高亮显示
		//打开高亮
		solrParams.setHighlight(true);
		//指定高亮域
		solrParams.addHighlightField("greensName");
		//指定高亮域前缀
		solrParams.setHighlightSimplePre("<span style='color:red;'>");
		//指定高亮域后缀
		solrParams.setHighlightSimplePost("</span>");
		//执行查询
		QueryResponse response = solrServer.query(solrParams);
		//返回结果集
		SolrDocumentList docs = response.getResults();
		//总条数
		long totalNumFound = docs.getNumFound();
		System.out.println("===>"+totalNumFound);
		//高亮结果集
		Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
		//便利结果集
		for (SolrDocument doc : docs) {
			Map<String, List<String>> map = highlighting.get(doc.get("id"));
			List<String> list = map.get("greensName");
			System.out.println(list.get(0)+"------------------------");
			System.out.println(doc.get("id"));
			System.out.println(doc.get("greensTypeName"));
			System.out.println(doc.get("greensName"));
			System.out.println(doc.get("greensUnit"));
			System.out.println(doc.get("greensPreiod"));
			System.out.println(doc.get("greensNumber"));
			System.out.println(doc.get("greensPrice"));
			System.out.println(doc.get("greensMarketPrice"));
			System.out.println(doc.get("greensClass"));
			System.out.println(doc.get("greensRemark"));
			System.out.println(doc.get("greensTime"));
			System.out.println(doc.get("greensTupian"));
			System.out.println(doc.get("greensStop"));
			System.out.println(doc.get("greensBigType"));
		}
	}

四、solr整合三大框架

只需要在Spring-MVC.xml中加入以下代码就行

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值