码迷,mamicode.com
首页 > 其他好文 > 详细

(转)淘淘商城系列——使用solrj来测试索引库

时间:2017-06-08 12:04:19      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:https   商城   markdown   文件   public   style   注意   new   字段   

http://blog.csdn.net/yerenyuan_pku/article/details/72892280

我们使用solrj来操作索引库,一般习惯先建一个单元测试类测试下增删改查方法是否好使,这样可以大大减少出错概率,提升开发效率。 
我们的taotao-search-service工程还没有添加对solrj的依赖,因此需要先添加对solrj的依赖,在taotao-search-service工程的pom.xml文件当中添加如下依赖(之所以不用写版本号是因为在taotao-parent工程中已经统一定义好版本号了)。

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

 

技术分享
下面我们新建一个测试类TestSolrJ,如下图所示。先行测试添加文档操作。注意:添加的字段必须是schema.xml中定义的。 
技术分享
为了方便大家复制,现将测试类TestSolrJ的代码贴出。

public class TestSolrJ {

    @Test
    public void testSolrJAddDocument() throws Exception {
        // 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
        // 如果有多个collection,则需要指定要操作哪个collection,如果只有一个,可以不指定
        SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
        // 创建一个文档对象,即SolrInputDocument对象
        SolrInputDocument document = new SolrInputDocument();
        // 向文档中添加域,添加域这里面有一个要求,必须有一个id域,域必须在schema.xml中定义
        document.addField("id", "test001");
        document.addField("item_title", "海尔空调");
        document.addField("item_sell_point", "送电暖宝一个哟!");
        document.addField("item_price", 10000);
        document.addField("item_image", "http://www.123.ipg");
        document.addField("item_category_name", "电器");
        document.addField("item_desc", "这是一款最新的空调,质量好,值得您信赖!!");
        // 把文档写入索引库
        solrServer.add(document);
        // 提交
        solrServer.commit();
    }

}
  • 1

执行上面的方法,成功后,我们到Solr首页,点击”Execute Query”按钮,即可查询到我们刚才添加的文本。 
技术分享
大家发现了没有,在查询出来的数据当中没有item_desc字段,这是因为在schema.xml文件中指定该字段不保存,如下图所示,indexed=”true”表示分词存储且可以查询,stored=”false”表示不存储内容,如果stored=”false”,那么该字段就不会随查询结果一起显示,只有当stored=”true”时才会显示。 
技术分享
下面我们来测试通过ID删除文档。所以我们需要在TestSolrJ单元测试类中添加如下测试方法。

@Test
public void testSolrJDeleteDocument() throws Exception {
    // 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
    SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
    // 通过id来删除文档
    solrServer.deleteById("test001");
    // 提交
    solrServer.commit();
}
  • 1

执行上面的方法,成功后,我们再查询,发现已经没有刚才我们添加的那个文档了,如下图所示。 
技术分享
下面我们再测试另外一种删除方法,由于刚才我们把仅存的一条文档删除了,现在我们再添加两条数据,如下图所示。 
技术分享
现在通过搜索来删除文档,故应在TestSolrJ单元测试类中添加如下测试方法。

@Test
public void deleteDocumentByQuery() throws Exception {
    // 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
    SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
    // 通过价格来删除文档
    solrServer.deleteByQuery("item_price:20000");
    // 提交
    solrServer.commit();
}

 

执行上面的方法,成功后,我们再查询,发现已经没有价格为20000的那个文档记录了,如下图所示。 
技术分享
至于修改操作其实就是添加操作,ID一样的,新记录会覆盖老记录,从而达到修改的目的。 
下面我们进行查询操作,故应在TestSolrJ单元测试类中添加如下测试方法。

@Test
public void queryDocument() throws Exception {
    // 创建一个SolrServer对象,即HttpSolrServer对象,需要指定solr服务的url
    SolrServer solrServer = new HttpSolrServer("http://192.168.25.129:8080/solr");
    SolrQuery query = new SolrQuery();
    query.setQuery("id:test001");
    QueryResponse response = solrServer.query(query);
    SolrDocumentList list = response.getResults();
    for (SolrDocument document : list) {
        String id = document.getFieldValue("id").toString();
        String title = document.getFieldValue("item_title").toString();
        System.out.println(id);
        System.out.println(title);
    }
}

 

执行上面的方法,成功后,我们可在Eclipse控制台上看到如下结果。 
技术分享

 
0

(转)淘淘商城系列——使用solrj来测试索引库

标签:https   商城   markdown   文件   public   style   注意   new   字段   

原文地址:http://www.cnblogs.com/love540376/p/6961926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!