solr

什么是solr?
sorl是一个企业级的搜索服务器
remote  procedure  call 远程过程调用
可以通过http请求,向索引库当中插入数据,从索引库当中查询数据
solr的底层其实还是lucene,只不过对lucene进行了分装,提供了管理界面,以及进行了一些优化操作等
========================================================================================
solr的两种运行方式
1.jetty
F:\software\solr-4.10.2\example\start.jar
java -jar start.jar
访问路径及端口号
http://localhost:8983/solr/#/
----------------------------------------------------------------------------------------
2.使用tomcat服务器运行
①拷贝F:\software\solr-4.10.2\example\webapps下的solr.war
解压并更改war包的扩展名solr.war.bak
②拷贝所需的classes/log4j.properties和lib(所需jar包日志包ik分词器包)
放到F:\software\apache-tomcat-7.0.77\webapps\solr\WEB-INF下
③修改tomcat配置文件
修改tomcat 的bin目录下的catalina.bat这个文件
set "JAVA_OPTS=-Dsolr.solr.home=F:/cangku/solr"
solr文件是solr的索引库
F:\cangku\solr
④启动tomcat
访问路径http://localhost:8080/solr/
=========================================================================================
Solr的配置文件以及日志的警告解决
①复制F:\software\solr-4.10.2下contrib和dist文件夹
放到solr索引库中F:\cangku\solr
②修改配置文件
F:\cangku\solr\collection1\conf\solrconfig.xml
更改contrib和dist文件夹的路径
 <lib dir="../contrib/extraction/lib" regex=".*\.jar" />
 <lib dir="../dist/" regex="solr-cell-\d.*\.jar" />
 <lib dir="../contrib/clustering/lib/" regex=".*\.jar" />
 <lib dir="../dist/" regex="solr-clustering-\d.*\.jar" />
 <lib dir="../contrib/langid/lib/" regex=".*\.jar" />
 <lib dir="../dist/" regex="solr-langid-\d.*\.jar" />
 <lib dir="../contrib/velocity/lib" regex=".*\.jar" />
 <lib dir="../dist/" regex="solr-velocity-\d.*\.jar" />
=============================================================================
修改索引库中F:\cangku\solr\collection1\conf\文件夹下
schema.xml定义我们需要的字段
<?xml version="1.0" encoding="UTF-8" ?>


<schema name="example" version="1.5">
    <!-- 不能删除的3个字段 -->
<field name="_version_" type="long" indexed="true" stored="true" />
<field name="_root_" type="string" indexed="true" stored="false" />
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

<!-- 字段 -->
<field name="name" type="text_ik" indexed="true" stored="true" />
<field name="title" type="text_ik" indexed="true" stored="true" multiValued="true" />
<field name="content" type="text_ik" indexed="false" stored="true" multiValued="true" />
<field name="text" type="text_ik" indexed="true" stored="false" multiValued="true" />


<!-- 动态字段 -->
<dynamicField name="*_s" type="string" indexed="true"
stored="true" />
<!-- 主键 -->
<uniqueKey>id</uniqueKey>


<!-- 自动复制字段 -->
<copyField source="name" dest="text" />
<copyField source="title" dest="text" />


<!-- 字段类型 -->
<fieldType name="string" class="solr.StrField"
sortMissingLast="true" />
<fieldType name="long" class="solr.TrieLongField"
precisionStep="0" positionIncrementGap="0" />
<fieldType name="text_general" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true"
words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
ignoreCase="true" expand="true" />
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>


    <!--定义我们的ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
</schema>


将ik分词器的3个配置文件导入solr项目的
F:\software\apache-tomcat-7.0.77\webapps\solr\WEB-INF\classes路径下
========================================================================================
手动添加索引库collection2
修改配置文件core.properties
name=collection2
=========================================================================================
使用solrj(API)
导入jar包
<dependencies>
<!-- Junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.2</version>
</dependency>
<!-- Solr底层会使用到slf4j日志系统 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.22</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
----------------------------------------------------------------------------------------
修改索引库中的数据的两种方式:
        //将数据封装到document中提交到索引库中
@Test
public void testName() throws Exception {
        //连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
//创建文档对象
SolrInputDocument solrInputDocument = new SolrInputDocument();
//封装数据到文档对象中
solrInputDocument.addField("id", "1");
solrInputDocument.addField("name", "苹果");
solrInputDocument.addField("title", "苹果手机");
solrInputDocument.addField("content", "苹果手机真好用");
//添加或更新数据到索引库中
hs.add(solrInputDocument);
//增删改必须提交
hs.commit();
}
----------------------------------------------------------------------------------------
//将数据封装到javaBean中提交到索引库中
@Test
public void testName01() throws Exception {
        //连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
//创建Items对象
Items items = new Items();
//将需要提交的数据封装到对象中
items.setId("2");
items.setName("华为");
items.setTitle("华为手机");
items.setContent("华为手机更好用!");
//将数据添加或更新到索引库中
hs.addBean(items);
//增删改必须提交
hs.commit();
}
注意:需要在javaBean得属性上加@Field注释
@Field
private String id;
@Field
private String name;
@Field
private String title;
@Field
private String content;
@Field
private String text;
---------------------------------------------------------------------------------------
// 将索引库中的数据删除
@Test
public void testName02() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
//将数据删除
hs.deleteById(list);
// 增删改必须提交
hs.commit();
}
// 批量删除
@Test
public void testName04() throws Exception {
        //连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
hs.deleteByQuery("*:*");
hs.commit();
}
=======================================================================================
查询返回两种类型document和javaBean
// 查询返回document
@Test
public void testName05() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
//传入查询条件返回查询结果
QueryResponse response = hs.query(new SolrQuery("title:华为"));
SolrDocumentList list = response.getResults();
for (SolrDocument sd : list) {
System.out.println(sd.getFieldValue("id"));
System.out.println(sd.getFieldValue("name"));
System.out.println(sd.getFieldValue("title"));
System.out.println(sd.getFieldValue("content"));
}
}


// 查询返回Items
@Test
public void testName06() throws Exception {
//连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
QueryResponse response = hs.query(new SolrQuery("title:华为"));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items : list) {
System.out.println(items);
}
}


=======================================================================================


// 布尔操作查询
@Test
public void testName07() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
QueryResponse response = hs.query(new SolrQuery("name:华为 OR name:三星"));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items : list) {
System.out.println(items);
}
}


// 相似度查询
@Test
public void method08() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
QueryResponse response = hs.query(new SolrQuery("name:acer~2"));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items : list) {
System.out.println(items);
}
}


// 范围值查询
@Test
public void method09() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
QueryResponse response = hs.query(new SolrQuery("id:[2 TO 5]"));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items : list) {
System.out.println(items);
}
}
=========================================================================================
// 排序操作 方法addSort("id", ORDER.desc)
@Test
public void method10() throws Exception {
// 连接solr服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
QueryResponse response = hs.query(new SolrQuery("id:[2 TO 5]").addSort("id", ORDER.desc));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items2 : list) {
System.out.println(items2);
}
}
========================================================================================
// 分页操作 
        // 方法setStart((pageNumber - 1) * pageSize);  
        // 方法setRows(pageSize);
@Test
public void method11() throws Exception {
// 连接sorl服务器
int pageNumber = 2;
int pageSize = 2;


HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
SolrQuery solrQuery = new SolrQuery("id:[2 TO 5]");
solrQuery.setStart((pageNumber - 1) * pageSize);
solrQuery.setRows(pageSize);
QueryResponse response = hs.query(solrQuery.addSort("id", ORDER.asc));
List<Items2> list = response.getBeans(Items2.class);
for (Items2 items2 : list) {
System.out.println(items2);
}
}
========================================================================================
// 高亮操作
@Test
public void method12() throws Exception {
// 连接sorl服务器
HttpSolrServer hs = new HttpSolrServer("http://localhost:8080/solr/collection2");
SolrQuery sq = new SolrQuery("title:华为");
开启设置高亮字段
                sq.setHighlight(true);
//前缀
sq.setHighlightSimplePre("<em color='red'>");
//后缀
sq.setHighlightSimplePost("</em>");
QueryResponse response = hs.query(sq);
                //获取高亮显示数据
Map<String, Map<String, List<String>>> hl = response.getHighlighting();
System.out.println(hl);


List<Items2> list = response.getBeans(Items2.class);
for (Items2 items2 : list) {
String id = items2.getId();
Map<String, List<String>> map = hl.get(id);
System.out.println(map.get("text").get(0));
System.out.println(items2);
}
}
=========================================================================================
ssh-keygen -R ip地址































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值