官方的Solr Java API有一个deleteByQuery操作,我们可以在这里删除满足查询的文档。AWS CloudSearch SDK似乎没有匹配的功能。我只是没有看到deleteByQuery的等效功能,还是我们需要自己推出?
大概是这样的:
SearchRequest searchRequest = new SearchRequest();
searchRequest.setQuery(queryString);
searchRequest.setReturn("id,version");
SearchResult searchResult = awsCloudSearch.search(searchRequest);
JSONArray docs = new JSONArray();
for (Hit hit : searchResult.getHits().getHit()) {
JSONObject doc = new JSONObject();
doc.put("id", hit.getId());
// is version necessary?
doc.put("version", hit.getFields().get("version").get(0));
doc.put("type", "delete");
docs.put(doc);
}
UploadDocumentsRequest uploadDocumentsRequest = new UploadDocumentsRequest();
StringInputStream documents = new StringInputStream(docs.toString());
uploadDocumentsRequest.setDocuments(documents);
UploadDocumentsResult uploadResult = awsCloudSearch.uploadDocuments(uploadDocumentsRequest);
这合理吗?有没有更简单的方法?
3条答案
按热度按时间k10s72fa1#
你说得对,CloudSearch没有与deleteByQuery等价的方法,你的方法看起来是次佳选择。
不,
version
是不必要的--它在2013年1月1日的CloudSearch API(又名v2)中被删除了。kuarbcqp2#
CloudSearch不提供删除作为查询,它支持删除的方式略有不同,即构建只有文档ID的json对象(要删除),操作应指定为删除。这些json对象可以一起批处理,但批处理大小必须小于5 MB。
下面的类支持此功能,您只需向其delete方法传递要删除的id数组:
eqzww0vc3#
针对C#进行了修改-在云搜索中删除已上传的文档