我正在执行一项维护任务,该任务将拦截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中。如果可以搜索并获得结果,则需要确保您的自定义代码确实在运行。
IndexingOperationListener
另外,您无需清除列表并再次添加所有文档。您只需要修改循环中的文档即可。