【问题标题】:Pattern capture with different token position / offset具有不同标记位置/偏移的模式捕获
【发布时间】:2019-06-14 11:47:29
【问题描述】:

来自弹性搜索文档

注意:所有标记都在相同的位置发出,并且具有相同的字符偏移量。这意味着,例如,使用此分析器的 john-smith_123@foo-bar.com 的匹配查询将返回包含任何这些标记的文档,即使使用 and 运算符也是如此。此外,当与突出显示结合使用时,将突出显示整个原始标记,而不仅仅是匹配的子集。例如,在上述电子邮件地址中查询“smith”将突出显示: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-capture-tokenfilter.html

有没有办法生成具有不同位置/偏移量的令牌?

鉴于弹性搜索提供的示例,我希望能够在 comjohn 上进行搜索,但据我了解,它将匹配所有包含 comjohn 的电子邮件,因为它们将认为是相同的位置。

(在我的情况下,我想这样做以进行代码分析,与他们给出的 2 秒示例非常相似)

      "analysis" : {
         "filter" : {
            "code" : {
               "type" : "pattern_capture",
               "preserve_original" : true,
               "patterns" : [
                  "(\\p{Ll}+|\\p{Lu}\\p{Ll}+|\\p{Lu}+)",
                  "(\\d+)"
               ]
            }
         },

【问题讨论】:

    标签: elasticsearch search indexing


    【解决方案1】:

    我不完全理解您的问题,但看起来您正在尝试做的是:确保索引标记器按您的预期破坏输入,这意味着有一个“com”标记和“john”标记。您可以通过运行分析请求来检查标记器:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html

    输入按预期进行分析和标记后,您可以运行 John AND com 查询,它应该可以按预期工作。

    【讨论】:

    • 确实,在大多数情况下,您所描述的都是正确的。但问题在于 pattern_capture 令牌过滤器不是它的工作方式。我想实现您所描述的,但是,此过滤器将正确拆分令牌。所以 com 和 john 将被正确索引。但是,它们的位置/偏移量与您描述的行为是不可能的含义相同。来自文档:return documents containing any of these tokens, even when using the and operator
    • 这听起来很奇怪。我从来没有遇到过这个。也许你可以运行一个正则表达式查询,在同一个正则表达式中同时包含“john”和“com”,这将强制它们的位置和存在,
    • 您找到解决方案了吗? @Ay_mhwan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多