【Solr】solr的增删改查

 

目录

创建工程

普通的java web工程即可,我采用的是spring mvc!

@Autowired
    private SolrServer solrServer;
    
    @Override
    public void addInterForProduct() throws Exception 
    {
        // 构造一篇文档
        SolrInputDocument document = new SolrInputDocument();
        //往doc中添加字段,在客户端这边添加的字段必须在服务端的配置文件中有定义
        document.addField("id", "num002");
        document.addField("title_ik", "113333");
        document.addField("content_ik", "11");
        
        solrServer.add(document);
        UpdateResponse response = solrServer.commit();
        System.out.println("---UpdateResponse-"+response);
    }

请求后,返回值为

---UpdateResponse-{responseHeader={status=0,QTime=288}}

status = 0 为成功!失败的情况还没测出来,不知道返回值是什么。知道的童鞋,请告知。

用solr界面查询一下,新增加的已经填入索引库!

{
  "responseHeader": {
    "status": 0,
    "QTime": 2,
    "params": {
      "q": "id:num002",
      "indent": "true",
      "wt": "json",
      "_": "1457489330978"
    }
  },
  "response": {
    "numFound": 1,
    "start": 0,
    "docs": [
      {
        "id": "num002",
        "title_ik": "113333",
        "content_ik": [
          "11"
        ],
        "_version_": 1528288311726047200
      }
    ]
  }
}

    @Override
    public void deleteInterForProduct() throws Exception {
        // 删除id域中有num002关键字的文档
        solrServer.deleteByQuery("id:num002");

        // 删除solr服务端索引库中所有的文档
        //solrServer.deleteByQuery("*:*");

        UpdateResponse response =solrServer.commit();
        System.out.println("---deleteInterForProduct-"+response);
    }

删除了id=num002的文档,可以删除库中的所有文档。

返回值

---deleteInterForProduct-{responseHeader={status=0,QTime=54}}

再次查询websolr,结果已经不存在了。

所谓solr的更新操作,就是就是对相同id的文档重新添加一次。

        SolrQuery query = new SolrQuery();

        // 给query设置一个主查询条件:关键词
        query.set("q", "id:num001");

        QueryResponse response = solrClient.query(query);

        SolrDocumentList docs = response.getResults();

        long numFound = docs.getNumFound();

        System.out.println("总共查询到的文档数量: " + numFound);

        for (SolrDocument doc : docs) {

            System.out.println(doc.get("id"));
            System.out.println(doc.get("title_ik"));
            System.out.println(doc.get("content_ik"));

        }

高量查询

SolrQuery query = new SolrQuery();

        // 给query设置一个主查询条件:关键词
        query.set("q", "台灯");

        // 给query增加范围过滤查询条件
        // query.addFilterQuery("product_price:[0 TO 200]");

        // 给query增加布尔过滤条件
        // query.addFilterQuery("-product_name:台灯");

        /**
         * 这一句等价于上面两句过滤条件设置
         */
        // query.set("fq", "product_price:[0 TO 200] -product_name:台灯");

        // 给query设置默认搜索域
        query.set("df", "product_keywords");

        // 设置返回结果的排序规则
        query.setSort("product_price", ORDER.desc);

        // 设置分页参数
        query.setStart(0);
        query.setRows(20);

        QueryResponse response = solrClient.query(query);

        SolrDocumentList docs = response.getResults();

        long numFound = docs.getNumFound();

        System.out.println("总共查询到的文档数量: " + numFound);

        for (SolrDocument doc : docs) {

            System.out.println(doc.get("id"));
            System.out.println(doc.get("product_price"));
            System.out.println(doc.get("product_name"));
            System.out.println(doc.get("product_catalog_name"));

        }
原文地址:https://www.cnblogs.com/anny0404/p/5235007.html