2

我正在处理提到的一项维护任务,该任务将拦截 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;

    }

});

我做错什么了吗?删除的字段不会被保留:(

感谢您的任何提示!

4

1 回答 1

2

虽然IndexingOperationListener不是为了修改文档,但代码看起来不错。唯一的问题是您只修改了被索引的 lucene 文档,它不包含您要删除的字段。如果您不想在源代码中使用它,您也必须修改源代码。但我认为即使您在文档中看到该字段,您也无法实际搜索它,因为它不在 lucene 中。如果您可以对其进行搜索并获得结果,那么您需要确保您的自定义代码实际运行。

此外,您无需清除列表并再次添加所有文档。您可以只修改循环中的文档,就是这样。

于 2013-09-16T10:48:32.013 回答