我正在执行提到的维护任务,该任务将拦截 ES 索引操作,并在某些情况下更改字段的内容。
我的问题是:我如何操作这些文档?有一个index.docs()方法。例如,我获取第一个(也是唯一一个)文档,添加一个字段,然后希望它被持久化,但不幸的是,该字段不会被设置/或删除。
Example:
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 中。如果您可以搜索它并获得结果,那么您需要确保您的自定义代码实际运行。
此外,您不需要清除列表并再次添加所有文档。您只需修改循环中的文档即可,仅此而已。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)