Solrj使用检索

Posted ehow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solrj使用检索相关的知识,希望对你有一定的参考价值。

主要讲解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);
}

 

总结

  1. 创建HttpSolrServer对象
  2. 创建SolrQuery对象
  3. 设置SolrQuery对象的查询条件
    1. 设置查询条件
    2. 设置默认查询域
    3. 设置过滤条件
    4. 设置分页查询
    5. 设置排序条件
  4. 设置SolrQuery对象的高亮条件
    1. 开启高亮模式
    2. 设置高亮显示域
    3. 设置高亮标签
  5. HttpSolrServer对象调用查询方法,传入SolrQuery对象,获得QueryResponse查询响应对象
  6. 从查询响应对象中获取查询结果文档集合SolrDocumentList【.getResults()】
  7. 从查询响应对象中获取高亮集合Map<String, Map<String, List<String>>> 【.getHighlighting()】
  8. 封装查询结果,返回给上一层
    1. 获取id域的值
    2. 获取高亮域的值
      1. 从高亮集合中获取高亮字段【.get(id域的值).get("高亮域"),返回一个List,拿出List中的第一个元素就是高亮域的结果】
      2. 如果步骤1中的List中没有内容,直接获取高亮域的值【.get("高亮域")】
    3. 获取其他域的值
    4. 封装获取到的值为对象,再将对象整合成集合

 

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>

 

以上是关于Solrj使用检索的主要内容,如果未能解决你的问题,请参考以下文章

JAVAEE——Solr:安装及配置后台管理索引库 使用SolrJ管理索引库仿京东的电商搜索案例实现

如何从片段中检索gridview中的图像?

Solr

Solr09-SolrJ的简介和使用

用于从 cloudkit 检索单列的代码模式/片段

检索数据未出现在 ListView 的片段中