Elasticsearch Char过滤器用正则表达式

时间:2015-11-29 14:36:26

标签: regex elasticsearch

我正在尝试在elasticsearch中实现一个字符过滤器来执行任务 - 在一个句子中找到一个单词[假设单词是F],该句子可以在一个段落中。它会在同一个句子中为[F]的所有后续单词[A]添加前缀。

作为示例:如果输入文本是 "它并不好而且优秀。你好,世界。我不喜欢它。"将变成"它不是〜好〜和〜优秀。你好,世界。我不喜欢〜它。"

到目前为止,我可以替换单词[F]之后的同一行中的下一个单词。

我的过滤器如下所示:

      "char_filter" : {
            "post_negs" : {
                "type" : "pattern_replace",
                "pattern" : "\\b((?i:never|no|not))\\s+(\\w*\\.|\\?|!)",
                "replacement" : "$1 ~$2"
            }
       }

现在我如何使用它实现我的目标。 TIA。

1 个答案:

答案 0 :(得分:0)

好的,所以我在你当前制作的正则表达式中看到了一些不一致的内容,以及你想要的最终结果(参考你的例子),但如果我理解你要找的主旨,我想this应该有效:

\b(?!not?\b)(?!never\b)([\w-]+)替换为~$1

请注意,第一个前瞻符合notno