隐藏

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

发布:2024/2/22 22:01:20作者:管理员 来源:本站 浏览次数:400

一、引言


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后台对数据进行操作,不能光光只靠代码。 今天就到这啦!!!