一些常用的小玩意之solr

1. Solr服务搭建

1.1. Solr的环境

Solrjava开发。

需要安装jdk

安装环境Linux

需要安装Tomcat

1.2. 搭建步骤

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

第二步:解压solr

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

第四步:把solr部署到Tomcat下。

第五步:解压缩war包。启动Tomcat解压。

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

[root@localhost ext]# pwd

/root/solr-4.10.3/example/lib/ext

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

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

[root@localhost example]# pwd

/root/solr-4.10.3/example

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

[root@localhost example]#

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


第九步:启动Tomcat

http://192.168.25.154:8080/solr/

windows下的配置完全一样。

注意:需要把tomcat关闭再删除war,因为tomcat启动时删除war包,会同时将解压的文件夹也一并删除。

1.3. 配置业务域

以搜索商品为例:

schema.xml中定义

1、商品Id

2、商品标题

3、商品卖点

4、商品价格

5、商品图片

6、分类名称

创建对应的业务域。需要制定中文分析器。

创建步骤:

第一步:把中文分析器添加到工程中。

1、IKAnalyzer2012FF_u1.jar添加到solr工程lib目录下

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

        ext_stopword.dic  IKAnalyzer.cfg.xml  mydict.dic

第二步:配置一个FieldType,制定使用IKAnalyzer

修改schema.xml文件该文件的位置/usr/local/solrhome/collection1/conf)

修改Solrschema.xml文件,添加FieldType

<fieldType name="text_ik" class="solr.TextField">

  <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>

</fieldType>

第三步:配置业务域,type制定使用自定义的FieldType

设置业务系统Field

<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"/>

第四步:重启tomcat

2. 搜索工程搭建


要实现搜索功能,需要搭建solr服务、搜索服务工程、搜索系统

3. 使用solrJ管理索引库

使用SolrJ可以实现索引库的增删改查操作。

3.1. 添加文档

第一步:把solrJjar包添加到工程中。

第二步:创建一个SolrServer,使用HttpSolrServer创建对象。

第三步:创建一个文档对象SolrInputDocument对象。

第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。

第五步:把文档添加到索引库中。

第六步:提交。

@Test

public void addDocument()throws Exception {

// 第一步:把solrJ的jar包添加到工程中。

// 第二步:创建一个SolrServer,使用HttpSolrServer创建对象。

//注意注意

/注意注意

/注意注意

//下述url后均需加上core名字,例如http://192.168.25.154:8080/solr/core1

SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

// 第三步:创建一个文档对象SolrInputDocument对象。

SolrInputDocument document = new SolrInputDocument();

// 第四步:向文档中添加域。必须有id域,域的名称必须在schema.xml中定义。

document.addField("id","test001");

document.addField("item_title","测试商品");

document.addField("item_price","199");

// 第五步:把文档添加到索引库中。

solrServer.add(document);

// 第六步:提交。

solrServer.commit();

}

3.2. 删除文档

3.2.1. 根据id删除

第一步:创建一个SolrServer对象。

第二步:调用SolrServer对象的根据id删除的方法。

第三步:提交。

@Test

public void deleteDocumentById()throws Exception {

// 第一步:创建一个SolrServer对象。

SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

// 第二步:调用SolrServer对象的根据id删除的方法。

solrServer.deleteById("1");

// 第三步:提交。

solrServer.commit();

}

3.2.2. 根据查询删除

@Test

public void deleteDocumentByQuery()throws Exception {

SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

solrServer.deleteByQuery("title:change.me");

solrServer.commit();

}

3.3. 查询索引库

查询步骤:

第一步:创建一个SolrServer对象

第二步:创建一个SolrQuery对象。

第三步:向SolrQuery中添加查询条件、过滤条件。。。

第四步:执行查询。得到一个Response对象。

第五步:取查询结果。

第六步:遍历结果并打印。

3.3.1. 简单查询

@Test

public void queryDocument()throws Exception {

// 第一步:创建一个SolrServer对象

SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

// 第二步:创建一个SolrQuery对象。

SolrQuery query = new SolrQuery();

// 第三步:向SolrQuery中添加查询条件、过滤条件。。。

query.setQuery("*:*");

// 第四步:执行查询。得到一个Response对象。

QueryResponse response = solrServer.query(query);

// 第五步:取查询结果。

SolrDocumentList solrDocumentList = response.getResults();

System.out.println("查询结果的总记录数:" +solrDocumentList.getNumFound());

// 第六步:遍历结果并打印。

for (SolrDocument solrDocument : solrDocumentList) {

System.out.println(solrDocument.get("id"));

System.out.println(solrDocument.get("item_title"));

System.out.println(solrDocument.get("item_price"));

}

}

3.3.2. 带高亮显示

@Test

public void queryDocumentWithHighLighting()throws Exception {

// 第一步:创建一个SolrServer对象

SolrServer solrServer = new HttpSolrServer("http://192.168.25.154:8080/solr");

// 第二步:创建一个SolrQuery对象。

SolrQuery query = new SolrQuery();

// 第三步:向SolrQuery中添加查询条件、过滤条件。。。

query.setQuery("测试");

//指定默认搜索域

query.set("df","item_keywords");

//开启高亮显示

query.setHighlight(true);

//高亮显示的域

query.addHighlightField("item_title");

query.setHighlightSimplePre("<em>");

query.setHighlightSimplePost("</em>");

// 第四步:执行查询。得到一个Response对象。

QueryResponse response = solrServer.query(query);

// 第五步:取查询结果。

SolrDocumentList solrDocumentList = response.getResults();

System.out.println("查询结果的总记录数:" +solrDocumentList.getNumFound());

// 第六步:遍历结果并打印。

for (SolrDocument solrDocument : solrDocumentList) {

System.out.println(solrDocument.get("id"));

//取高亮显示

Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");

String itemTitle =null;

if (list !=null && list.size() > 0) {

itemTitle =list.get(0);

} else {

itemTitle = (String)solrDocument.get("item_title");

}

System.out.println(itemTitle);

System.out.println(solrDocument.get("item_price"));

}

}

猜你喜欢

转载自blog.csdn.net/wang_3600/article/details/78564452
今日推荐