Solr的配置和在java中的使用

Solr是一个全局站内搜索引擎,可以快速的搜索出结果。

Solr依赖于tomcat,把Solr的war包放到tomcat中即可运行。

  • 使用solr,需要在solr的schema.xml中配置solr与java的映射关系,便于存放数据,在schema.xml中配置如下关系。

    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
    
    <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_desc" type="text_ik" indexed="true" stored="false" />
    
    <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"/>
    <copyField source="item_desc" dest="item_keywords"/>

Solr与Spring的集成

  • 添加支持solr客户端的依赖

    <!-- solr客户端 -->
    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.10.3</version>
    </dependency>
  • 在Spring中配置Solr的bean
    <bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
        <constructor-arg name="baseURL" value="http://47.95.196.183:8080/solr/"></constructor-arg>
    </bean>
  • 向solr中添加数据,先从数据库中查询出所有有用信息,然后放到solr中
    //导入solrServer对象
    @Autowired
    private SolrServer solrServer;
    
    //查询商品列表
    List<SolrItem> list = itemMapper.getItemList();
    //向索引库中添加文档
    for (SolrItem solrItem : list) {
        //创建文档对象
        SolrInputDocument document = new SolrInputDocument();
        document.setField("id", solrItem.getId());
        document.setField("item_title", solrItem.getTitle());
        document.setField("item_sell_point", solrItem.getSell_point());
        document.setField("item_price", solrItem.getPrice());
        document.setField("item_image", solrItem.getImage());
        document.setField("item_category_name", solrItem.getItem_cat_name());
        document.setField("item_desc", solrItem.getItem_desc());
        //向索引库中添加文档
        solrServer.add(document);
    }
    //提交修改
    solrServer.commit();

这样,数据就全部添加到Solr中了。

  • 从Solr中查询数据

    @Autowired
    private SolrServer solrServer;//导入solrServer对象
    
    //创建查询对象
    SolrQuery solrQuery = new SolrQuery();
    //设置查询条件
    //solrQuery.set("q","");
    solrQuery.setQuery(queryString);
    //设置分页
    solrQuery.setStart((int) ((page - 1) * pageSize));
    solrQuery.setRows(pageSize.intValue());
    //高亮设置
    solrQuery.setHighlight(true);
    //设置高亮显示的域
    solrQuery.addHighlightField("item_title");
    //高亮显示的前缀
    solrQuery.setHighlightSimplePre("<span style=‘color:red‘>");
    //高亮显示的后缀
    solrQuery.setHighlightSimplePost("</span>");
    //设置默认搜区域
    solrQuery.set("df", "item_keywords");
    
    //根据查询条件查询索引库
    QueryResponse response = solrServer.query(solrQuery);
    //从response中取查询结果
    SolrDocumentList list = response.getResults();
    //查询结果list
    List<SolrItem> itemList = new ArrayList<>();
    //遍历查询结果
    for (SolrDocument solrDocument : list) {
        //创建一商品对象
        SolrItem item = new SolrItem();
        item.setId(Long.parseLong((String)solrDocument.get("id")));
        //取高亮显示
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        List<String> hList = highlighting.get(solrDocument.get("id")).get("item_title");
        String title = "";
        //判断是否有高亮信息
        if (hList != null && hList.size() > 0) {
            title = hList.get(0);
        } else {
            title = (String) solrDocument.get("item_title");
        }
        item.setTitle(title);
        item.setSell_point((String) solrDocument.get("item_sell_point"));
        item.setPrice((long) solrDocument.get("item_price"));
        item.setImage((String) solrDocument.get("item_image"));
        //添加到商品列表
        itemList.add(item);
    }

最后,将查询的结果放入到itemList中返回。


  • 报错信息:在solr中提示没有item_title字段,后发现是在第一步中配置的映射关系没有生效,仔细检查发现是在创建classes文件夹的时候写成了calsses导致配置没有生效。。重新配置生效即可添加数据并调用接口。
时间: 2024-11-10 13:21:47

Solr的配置和在java中的使用的相关文章

Java中Properties类

Java中Properties类简介 知识学而不用,就等于没用,到真正用到的时候还得重新再学. Properties类继承自Hashtable,如下: 它主要用于读取Java的配置文件,由于配置文件中的很多变量时经常改变的,通过这个类可以让用户脱离程序本身去修改相关的变量配置.在Java中,其配置文件常为.properties文件,格式为文本文件,内容的格式为“键=值”的格式,#打头的是注释行,Properties会忽略注释.允许只有key没有value,没有value时,value会被set成

java中的SecureRandom在linux中的实现

在安全系统中,通常我们会使用securerandom去更安全的生成随机数,而默认的SecureRandom里使用的算法是SHA1PRNG. Linux中的随机数发生器 在Linux操作系统中,有一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器. /dev/random 在读取时,/dev/random设备会返回小于熵池噪声总数的随机字节./dev/random可生成高随机性的公钥或一次性密码本.若熵池空了,对/dev/random的读操作将会被阻塞,直到从别的设备中收集到了足够的环境噪声

Log4j在Java中使用实例

测试log4j的项目结构 Log4j.properties的路径为    src/config/log4j Log4j.properties文件的内容   在Web应用中web.xml利用Spring配置log4j   在java中使用log4j   当应用启动时,这里就会根据log4j的配置(log4j.appender.A3.File=c:/logtest/logtestxxx.log)在c盘下产生日志文件 当访问项目的资源时就会在该文件中添加日志信息 2013/12/05 11:46:33

在IntelliJ IDEA 13中配置OpenCV的Java开发环境

准备工作: 下载IDEA 13(这里以版本13为例,后面简称IDEA): 下载Java JDK(用于配置基本的Java开发环境): 下载OpenCV 2.4.9(这里以版本2.4.9为例,据这篇文章说,OpenCV的2.4版本开始支持Java API接口): 安装IDEA: 安装JDK,并在IDEA中配置JDK: 将下载好的OpenCV 2.4.9解压到某个目录下,例如,解压后的路径为“D:\opencv”,该路径下包含build文件夹和source文件夹. 配置开发环境: 1)在IDEA中新建

memcached在Java中的应用以及magent的配置-每天进步一点点

memcached在Java中的应用: http://nhy520.iteye.com/blog/1775893 magent配置memcached分布式集群的应用: http://www.jianshu.com/p/22594ce4307a

Spring装配bean(在java中进行显式配置)

1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行显示配置方式很少使用.本文专门介绍第2种方式. 如果在项目中,我们需要将第三方库装配到spring中,这时候就没法使用隐式装配方式(没法在第三方库中加@Component等注解),这时候, 就需要在两种显式配置中选方法配置. 其中在java中进行显式配置方式是更好的方案,因为它更为强大.类型安全并且

Java中的 JDK下载和环境配置(方式一)

第一步:需要安装JDK. JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 第二步:配置环境变量,需要配置3个环境变量 那环境变量怎么配呢?看下面的图片: 在系统变量中.来配置第一个java环境变量,叫JAVA_HOME变量 JAVA_HOME变量默认是不存在的,所以需要新建一个.单击 "新建" 紧接着来配置Path变量.Path默认是存在的.在最前面

java中的环境变量的配置

作为初学者来说配置环境变量是初学者的第一步: 下载并安装JDK1.60(或以上版本),假设安装在X:\jdk150目录下 打开:控制面板 系统 高级 环境变量 变量名 变量值 path .;X:\jdk140\bin ClassPath .;X:\jdk140\lib\tools.jar; .;X:\jdk140\lib\dt.jar; JAVA_HOME X:\jdk140 path 路径是为了保证在任何路径下都能找到,使用java的指令. 配置ClassPath路径是为了虚拟机能够找到我们要

java中JOB介绍与Spring中JOB的配置

2013-09-05 15:30:54| 分类: 默认分类 |举报|字号 订阅1定时器的作用 在实际的开发中,如果项目中需要定时执行或者需要重复执行一定的工作,定时器显现的尤为重要. 当然如果我们不了解定时器就会用线程去实现,例如: package org.lzstone.action public class FinanceAction extends Thread{ private Date date; public void run{ try{ while(true){ Thread.sl