Elasticsearch - preIndex

标签 elasticsearch listener

我正在执行提到的维护任务,该任务将拦截 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/

相关文章:

ElasticSearch 和 Nest : Why am I missing the id field on a query?

node.js - Elasticsearch Node js时间点search_phase_execution_exception

php - 数字格式异常对于字符串类型

java - ActionListener 和 MouseListener 冲突

java - 在 JTextField 上添加 FocusListener

java - 如何知道哪个 JCheckBox 发送了 ItemEvent

c# - 在 Nest ElasticSearch 中重复使用计数和搜索查询

elasticsearch - 在Elasticsearch中显示不匹配的文档

android - 使用 Switch 语句处理按钮点击

android - 广播 Intent 与多播监听器在Android上的实现