我正在执行提到的维护任务,该任务将拦截 ES 索引操作,并在某些情况下更改字段的内容。
我的问题是:我如何操作这些文档?有一个index.docs()方法。例如,我获取第一个(也是唯一一个)文档,添加一个字段,然后希望它被持久化,但不幸的是,该字段不会被设置/或删除。
示例:
indexingService.addListener(new IndexingOperationListener() {
@Override
public Index preIndex(Engine.Index index) {
List<Document> docs = index.docs();
List<Document> finalDocs = new ArrayList<Document>();
for (Document d : docs) {
d.removeField("field1");
finalDocs.add(d);
}
index.docs().clear();
index.docs().addAll(finalDocs);
return index;
}
});
我做错了什么吗?删除的字段不会被保留:(
感谢您的任何提示!
最佳答案
虽然 IndexingOperationListener
并不是为了修改文档,但代码看起来不错。唯一的事情是,您只是修改了索引的 lucene 文档,其中不包含您要删除的字段。如果您不希望它出现在源代码中,您也必须修改源代码。但我认为即使您在文档中看到该字段,您也无法实际搜索它,因为它不在 lucene 中。如果您可以搜索它并获得结果,那么您需要确保您的自定义代码实际运行。
此外,您无需清除列表并再次添加所有文档。您只需修改循环中的文档即可。
关于Elasticsearch - preIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18823546/