Solr使用简介

一、启动Solr

1、下载后(Linux ro Windows),解压,因为Solr是用java编写的,所以适应不同的操作平台。
下载地址:https://lucene.apache.org/solr/

2、启动
用默认搜索项目:java -jar start.jar
一般的,我们需要指定我们自己的项目,所以需要使用-Dsolr.solr.home参数指定,形如:

>java -Dsolr.solr.home=test-core -jar start.jar

项目中使用Solr的架构

二、建立数据项目

  1. 在example目录下创建test-core文件夹;
  2. 将example/solr下的solr.xml拷贝到test-core目录下;
  3. 在test-core下创建test目录,并且在test目录下创建conf和data目录;
    在这里插入图片描述
  4. 将example\solr\collection1\core.properties文件拷贝到test目录,修改name=test;
  5. 将example\solr\collection1\conf下的schema.xml、solrconfig.xml拷贝到example\test-core\test\conf下;
  6. 配置schema.xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
	<schema name="example" version="1.7">

	   <!-- solr默认的保留字段,不能修改 -->
	   <field name="_version_" type="long" indexed="true" stored="true"/>
	   <field name="_root_" type="string" indexed="true" stored="false"/>
	   <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />

	   <!-- 定义每个检索的字段,并指定类型,如果是要检索的字段,则需要指定为 -->
        <field name="id" type="integer" indexed="true" stored="true" required="true" multiValued="false" />
        ……
        
        <!—复制域,不同字段检索结果取并集,检索复制域相当于检索所有复制域字段-->
        <field name="copy_item" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
        <copyField source="title1" dest="copy_item"/>
<copyField source="title2" dest="copy_item"/>

        <!-- 主键域,Solr就是跟据上面定义的字段检索出数据表的中id, 这个id就是对应上面定义的检索字段id -->
		<uniqueKey>id</uniqueKey>

		<!-- 定义上面字段需要用到的字段类型,一般可以从Example中复制 -->
		<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
		<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
		……
		
		<fieldtype name="binary" class="solr.BinaryField"/>
		<fieldType name="text_ik" class="solr.TextField">
			<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
		</fieldType>
	</schema>
  1. 修改solrconfig.xml在这里插入图片描述
    在这里插入图片描述
    注意事项:
    因为solr只能定义基本类型,不能定义Java的应用类型(类)。最好再定义一个实体。

三、配置分词和其他

如果不配置分词,则只能对*进行搜索,对输入的其他内容都不能搜索。这是因为没有配置分词导致的。

  1. 将IKAnalyzer-2012-4x.jar拷贝到example\solr-webapp\webapp\WEB-INF\lib下;
  2. 在schema.xml文件中添加fieldType:
    IKAnalyzer-2012-4x.jar
  3. 重启solr,用analysis做分词测试
    在这里插入图片描述

四、向Solr中导入数据

		// solr中导入sku数据
		HttpSolrServer solr = new HttpSolrServer(MyPropertiesUtil.getMyProperty("solr.properties", "solr_myproject"));
		// 设置java类到solr文本的解析器
		solr.setParser(new XMLResponseParser());
		solr.addBeans(list_data);
		solr.commit();

solr.properties文件中的内容:

#配置solr项目的地址
solr_myproject=http://localhost:8983/solr/myproject

要对所要存储的类中的所有字段加上注解:@Field(“XX”)
例如:

	@Field("id")
	private int id;
	@Field("name")
	private Strinig name;
	@Field("age")
	private int age;

	// setter和getter
  1. 配置solr搜索项目的集合字段
  2. 调用solr服务,导入数据
@Before
	public void setUp() throws Exception {
		// 在url中指定索索项目名称
		String url = "http://localhost:8983/solr/test";
		HttpSolrServer httpSolrServer = new HttpSolrServer(url); // 定义solr的server
		httpSolrServer.setParser(new XMLResponseParser()); // 设置响应解析器
		httpSolrServer.setMaxRetries(1); // 设置重试次数,推荐设置为1
		httpSolrServer.setConnectionTimeout(500); // 建立连接的最长时间

		this.httpSolrServer = httpSolrServer;
	}

	@Test
	public void testImport() throws Exception {
		// 查询商品数据
		String url = "";
		String jsonData = doGet(url);
		List<OBJECT_T_MALL_SKU> json_to_list = MyJsonUtil.json_to_list(jsonData, new OBJECT_T_MALL_SKU());
		this.httpSolrServer.deleteByQuery("*:*");
		this.httpSolrServer.addBeans(json_to_list);
		this.httpSolrServer.commit();
	}

  1. 删除solr数据
 <delete><query>*:*</query></delete>
 this.httpSolrServer.deleteByQuery("*:*");

五、搜索项目工程

  1. 新建mvc项目
  2. 配置pom和spring容器中的solr客户端服务
	<bean id ="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg index="0" value="${url}" />
		<property name="parser">
			<bean class="org.apache.solr.client.solrj.impl.XMLResponseParser" />
		</property>
		<property name="maxRetries" value="1" />
		<property name="connectionTimeout" value="${connectionTimeout}"/>
	</bean>

  1. 新建controller,返回为值可设置为jsp或者json均可
  2. 通过HttpSolrServer对solr服务进行检索,并处理检索结果
		SolrQuery sq = new SolrQuery();
		sq.setQuery("sku_mch:联想高配高端");
		QueryResponse query = null;
		try {
			query = solrServer.query(sq);
		} catch (SolrServerException e) {
			e.printStackTrace();
		}
		List<OBJECT_T_MALL_SKU> beans = query.getBeans(OBJECT_T_MALL_SKU.class);

  1. 配置搜索关系
    schema.xml中
<solrQueryParser defaultOperator="AND"/>

六、Solr基本配置修改

  1. 修改搜索项目的配置文件sor.xml
  2. 修改默认端口号jetty.xml
  3. 关于URL:
    http://localhost:8983/solr/#/test 浏览器页面地址
    http://localhost:8983/solr/test 访问solr搜索项地址
    http://localhost:8983/solr/ solr服务地址

七、Solr与Zookeeper的集群管理

  1. zookeeper的配置
    配置zookeeper,加入Data目录,加入myid,myid中配置server编号,Zoo.cfg中配置
    (1) dataDir=/…
    (2) clientPort=218?
    (3) 节点列表
    server.1=ip:port:port
    server.2=ip:port:port

    启动所有的zookeeper节点
    Sh zkServer.sh start
    Sh zkServer.sh status
  2. solr项目的配置和启动
    (1) 解压solr复制war到tomcatwebapp下
    (2) 将solr中的ext目录lib目录下的jar拷贝到tomcat的solr/web-inf/lib下
    (3) 配置solrhome,选定目录如usr/local/solr/solrhome
    修改tomcat中的solr项目的web.xml,将项目加载路径指向solrhome
  3. 部署多个solr项目实例
    修改tomcat和solr的端口号,启动多个solr
  4. 配置tomcat的java_opts选项,在tomcat中配置zookeeper的集群ip
    JAVA_OPTS=”-DzkHost=ip:2181,ip:2182,ip:2183JAVA_OPTS=”-DzkHost=ip:2181,ip:2182,ip:2183
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值