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导致配置没有生效。。重新配置生效即可添加数据并调用接口。

转载于:https://www.cnblogs.com/esileme/p/7833690.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值