主要讲解Solrj的使用【查询】
//新建一个solr服务
HttpSolrServersolrServer=newHttpSolrServer("http://localhost:8983/solr/collection1");
//新建一个solr查询对象
SolrQuerysq=newSolrQuery();
//设置查询条件
//--设置查询条件
sq.setQuery("*:*");
//--设置默认查询域
sq.set("df","product_keywords");
//--设置过滤条件
sq.filterQueryies("product_catalog_name:衣服","product_price:[20TO50]");
//--设置分页条件
sq.setStart(0);//从第几条记录开始
sq.setRows(10);//页最大容量
//--设置查询结果排序
sq.setSort("product_price",ORDER.asc);
//设置高亮
//--开启高亮显示
sq.setHighlight(true);
//--设置高亮显示字段
sq.setHighlightField("product_name");
//--设置高亮标签
sq.setHighlightSimplePre("<fontcolor='red'>");
sq.setHighlightSimplePost("</font>");
//查询,获得响应对象
QueryResponseqr=solrServer.query(sq);
//获取查询结果集合
SolrDocumentListresultList=qr.getResults();
//获取高亮字段集合
Map<Stirng,Map<String,List<String>>>highlighting=qr.getHighlighting();
//封装查询结果
List<Porduct>productList=newArrayList<>();
for(SolrDocumentdoc:SolrDocumentList){
//获取id域
Stringid=doc.get("id").toString();
//获取名称域
Stringname=null;
List<String>list=highlighting.get(id).get("product_name");
if(list!=null&&list.size>0){
name=list.get(0);
}else{
name=doc.get("name").toString();
}
//获取其他域
Stringprice=doc.get("price").toString();
Stringpicture=doc.get("picture").toString;
//封装
Productp=newProduct();
p.setId(id);
p.setName(name);
p.setPrice(price);
p.setPicture(picture);
productList.add(p);
}
总结
- 创建HttpSolrServer对象
- 创建SolrQuery对象
- 设置SolrQuery对象的查询条件
- 设置查询条件
- 设置默认查询域
- 设置过滤条件
- 设置分页查询
- 设置排序条件
- 设置SolrQuery对象的高亮条件
- 开启高亮模式
- 设置高亮显示域
- 设置高亮标签
- HttpSolrServer对象调用查询方法,传入SolrQuery对象,获得QueryResponse查询响应对象
- 从查询响应对象中获取查询结果文档集合SolrDocumentList【.getResults()】
- 从查询响应对象中获取高亮集合Map<String, Map<String, List<String>>> 【.getHighlighting()】
- 封装查询结果,返回给上一层
- 获取id域的值
- 获取高亮域的值
- 从高亮集合中获取高亮字段【.get(id域的值).get("高亮域"),返回一个List,拿出List中的第一个元素就是高亮域的结果】
- 如果步骤1中的List中没有内容,直接获取高亮域的值【.get("高亮域")】
- 获取其他域的值
- 封装获取到的值为对象,再将对象整合成集合
pom
<properties>
<!-- spring版本号 -->
<spring.version>4.3.8.RELEASE</spring.version>
<!-- jstl标签版本 -->
<jstl.version>1.2</jstl.version>
<!-- commons-lang版本 -->
<commons.lang.version>2.6</commons.lang.version>
<!-- solrj版本 -->
<solrj.version>4.10.3</solrj.version>
<!-- log4j日志版本 -->
<slf4j.version>1.7.7</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<!-- jcl版本 -->
<jcl.version>1.7.6</jcl.version>
</properties>
<dependencies>
<!-- springmvc依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- solrj依赖 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solrj.version}</version>
</dependency>
<!-- log4j日志包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${jcl.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons.lang.version}</version>
</dependency>
<!-- jsp依赖包,只在编译时需要 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>jd</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<!-- tomcat 的端口号 -->
<port>8080</port>
<!-- 访问应用的路径 -->
<path>/jd</path>
<!-- URL按UTF-8进行编码,解决中文参数乱码 -->
<uriEncoding>UTF-8</uriEncoding>
<!-- tomcat名称 -->
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>