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
二、建立数据项目
- 在example目录下创建test-core文件夹;
- 将example/solr下的solr.xml拷贝到test-core目录下;
- 在test-core下创建test目录,并且在test目录下创建conf和data目录;
- 将example\solr\collection1\core.properties文件拷贝到test目录,修改name=test;
- 将example\solr\collection1\conf下的schema.xml、solrconfig.xml拷贝到example\test-core\test\conf下;
- 配置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>
- 修改solrconfig.xml
注意事项:
因为solr只能定义基本类型,不能定义Java的应用类型(类)。最好再定义一个实体。
三、配置分词和其他
如果不配置分词,则只能对*进行搜索,对输入的其他内容都不能搜索。这是因为没有配置分词导致的。
- 将IKAnalyzer-2012-4x.jar拷贝到example\solr-webapp\webapp\WEB-INF\lib下;
- 在schema.xml文件中添加fieldType:
IKAnalyzer-2012-4x.jar - 重启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
- 配置solr搜索项目的集合字段
- 调用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();
}
- 删除solr数据
<delete><query>*:*</query></delete>
this.httpSolrServer.deleteByQuery("*:*");
五、搜索项目工程
- 新建mvc项目
- 配置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>
- 新建controller,返回为值可设置为jsp或者json均可
- 通过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);
- 配置搜索关系
schema.xml中
<solrQueryParser defaultOperator="AND"/>
六、Solr基本配置修改
- 修改搜索项目的配置文件sor.xml
- 修改默认端口号jetty.xml
- 关于URL:
http://localhost:8983/solr/#/test 浏览器页面地址
http://localhost:8983/solr/test 访问solr搜索项地址
http://localhost:8983/solr/ solr服务地址
七、Solr与Zookeeper的集群管理
- 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 - 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 - 部署多个solr项目实例
修改tomcat和solr的端口号,启动多个solr - 配置tomcat的java_opts选项,在tomcat中配置zookeeper的集群ip
JAVA_OPTS=”-DzkHost=ip:2181,ip:2182,ip:2183JAVA_OPTS=”-DzkHost=ip:2181,ip:2182,ip:2183