使用 solrj 作为客户端从 Solr 中删除索引

Posted

技术标签:

【中文标题】使用 solrj 作为客户端从 Solr 中删除索引【英文标题】:Deleting index from Solr using solrj as a client 【发布时间】:2011-02-09 02:06:34 【问题描述】:

我使用 solrj 作为客户端在 solr 服务器上索引文档。

我在从 solr 服务器中按“id”删除索引时遇到问题。 我正在使用以下代码删除索引:

server.deleteById("id:20");
server.commit(true,true);

之后,当我再次搜索文档时,搜索结果也包含上述文档。不知道这段代码出了什么问题。 请帮我解决问题。

谢谢!

【问题讨论】:

【参考方案1】:

使用方法deleteByQuery()删除匹配查询的文档:

server.deleteByQuery("id:20");
server.commit();

【讨论】:

【参考方案2】:

因此,deleteById 仅在您仅使用一个属性形成密钥时才有效。因此,我遇到了 id 是多个属性的组合的情况,例如employeeId+deptId。但是,我的表将employeeId 和deptId 作为单独的列以及在其上创建的索引。因此,当我想删除一条记录时,我只有employeeId 而没有deptId。我使用 curl 命令删除了可以指定列及其值的位置,它将删除整个记录。

例如 curl http://localhost:8983/solr/update --data ':' -H '内容类型:文本/xml;字符集=utf-8'

【讨论】:

【参考方案3】:

删除文档后,提交服务器并添加以下行。 在服务器提交行之后。

  UpdateRequest req = new UpdateRequest();
  req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
  req.add( docs );
  UpdateResponse rsp = req.process( server );

【讨论】:

【参考方案4】:

调用deleteById时,只用id,不用查询语法:

server.deleteById("20");
server.commit();

【讨论】:

即使文档 id 是整数也能正常工作吗?

以上是关于使用 solrj 作为客户端从 Solr 中删除索引的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SOLRJ java客户端从SOLR获取列名(字段)?

SolrJ 的运用

使用SolrJ(即java客户端)开发Solr。

Solr06-SolrJ的使用及其高级查询

使用Solrj Api和Kerberized Solr创建Solr客户端

Solr09-SolrJ的简介和使用