java实现对solr索引库进行增删改查

一、引言

18年已到九月中旬,珍惜时间等于珍惜生命呐,时光流失,只怕再见来不及挥手。同样是一天上班的时间,有些小伙伴感觉一天很充实,也有些小伙伴感觉一天很无聊的过去了。同样是工作,取决你看待工作的态度,从而产生不同的效果。小编有时候早上到公司,会把今天所需要完成的计划规划好,然后按照规划去完成,如果有突发事件,也要学会合理安排时间。这样你的一天才是充实的,如果感觉无所事事,有事干的时候就干一下,也许你会感觉很无聊。且行且珍惜呐,把握生命里的每一分钟,哈哈哈~

以上都是小遍胡说八道的,不要相信~~~

二、索引库有什么作用

solr的环境搭建、solr中文分词器咱们都配置好了,那么接下来干嘛呢?搜索引擎在搜索商品的时候,并不是直接访问我们的数据库,而是检索solr的索引库,从而获得数据。那么solr的索引库数据怎么来呢?所以,这就是今天本章所需要讲解的内容。我们首先需要把搜索结果相对应的字段列举出来,比如搜索商品包括商品图片、名称、价格等等一些字段,下面咱们一步一步来实现

三、具体实现

第一步:需要在我们solr这个/usr/local/solr/solrhome/collection1/conf/schema.xml配置文件下,配置我们刚才所说的业务字段,在低端添加业务字段,name可以自己命名。item_keywords这个是一个隐藏域,方便我们后期检索的时候进行优化。重启后能在后台查看自己所配置的业务字段,如图2,则表示配置的没有问题。

在这里配置文件小编就不贴出来了,,防止小伙伴直接复制粘贴,还是动动小手吧。

不懂配置意思?fieId的属性解释,小编在下文已经列出来了

第二步:既然索引库配置好了,那咱们就使用java来对这些索引库进行一个维护。既然需要维护solr索引库,那肯定就得连接solr,这里咱们就使用solrJ客户端来进行连接。首先得引入solrJ的jar包,以maven为例。

     <!-- solr客户端 -->
     <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.10.3</version>
     </dependency>

第三步:增、删、改、查,dome如下

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

import java.util.ArrayList;

public class SolrJClient {

    /**
     * 添加、修改文档
     * @throws Exception
     */
    @Test
    public void addDocment() throws Exception {
        //建立solr连接
        SolrServer server = new HttpSolrServer("http://111.231.51.42:8080/solr");
        //创建一个文档对象
        SolrInputDocument document = new SolrInputDocument();

        //如果需要修改,即id一致即可
        //item_title、item_price、item_desc这些字段都是之前添加的业务字段
        document.addField("id","001");
        document.addField("item_title","iPhone XS Max");
        document.addField("item_price","9599");
        document.addField("item_desc","iPhone XS Max 支持双卡,给你更多选择,为工作、生活都带来更多便利5。这两款 iPhone 还都提供最高达 512GB 的存储容量,给你更广阔的施展空间。另外,就算它们电量...");

        //把文档写入索引库
        server.add(document);
        //提交操作
        server.commit();
    }

    /**
     * 删除文档
     * @throws Exception
     */
    @Test
    public void deleteDocment() throws Exception {

        //建立solr连接
        SolrServer server = new HttpSolrServer("http://111.231.51.42:8080/solr");

        //根据id删除文档
        server.deleteById("001");

        //批量删除文档
        server.deleteById(new ArrayList<String>(){{add("001");add("002");}});

        //提交操作
        server.commit();
    }

    /**
     * 查询索引
     * @throws Exception
     */
    @Test
    public void selectDocment() throws Exception {

        //建立solr连接
        SolrServer server = new HttpSolrServer("http://111.231.51.42:8080/solr");

        //创建一个查询对象
        SolrQuery query = new SolrQuery();

        //设置查询条件
        query.setQuery("*:*");
        query.setStart(20);
        query.setRows(50);

        //执行查询
        QueryResponse response = server.query(query);

        //取查询结果
        SolrDocumentList list = response.getResults();

        System.out.println("总共获取多少条数据"+list.getNumFound());
    }

}

三、fieId 通用属性

属性说明默认值
indexed字段值是否用于查询布尔值true
stored字段真实值是否可以被查询到布尔值true
docValues字段值是否列式存储布尔值false
sortMissingFirst sortMissingLast没有指定排序规则时,控制文档排序布尔值false
multiValues字段是否多值布尔值false
omitNorms是否忽略不适用该字段的规范布尔值true
omitTermFreqAndPositions是否忽略词频、位置等布尔值true
omitpositions类似omitTermFreqAndPositions但保留词频布尔值true
termVectors是否保留term vectors布尔值false
termPositions是否保留term position布尔值false
termOffsets是否保留term offset布尔值false
termPayloads是否保留term payload布尔值false
required是否拒绝空值的字段布尔值false
useDocValuesAsStored如果字段是docValues,设置为true将允许字段在fl参数匹配“*”时返回数据布尔值false

四、总结

本章只是针对使用solrJ简单的dome演示,下一章和大家学习,怎么在solr后台对索引进行增、删、改、查操作,有时候我们也需要掌握在solr后台对数据进行操作,不能光光只靠代码。 今天就到这啦!!!

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值