elasticsearch 使用Elasticsearch asciifolding忽略特定字符,elasticsearch,elastic-cloud,elasticsearch,Elastic Cloud" /> elasticsearch 使用Elasticsearch asciifolding忽略特定字符,elasticsearch,elastic-cloud,elasticsearch,Elastic Cloud" />

elasticsearch 使用Elasticsearch asciifolding忽略特定字符

elasticsearch 使用Elasticsearch asciifolding忽略特定字符,elasticsearch,elastic-cloud,elasticsearch,Elastic Cloud,在我的分析器中,我添加了asciifolding过滤器。在大多数情况下,这非常有效,但在使用丹麦语时,我不想规范æå字符,因为“rød”和“rod”是非常不同的单词 我们使用的是托管的弹性云集群,因此如果可能的话,我们需要一个不需要通过云平台进行任何非标准部署的解决方案 是否有任何方法可以进行ascifolding,但将某些字符列为白名单 当前在ES版本6.8上运行,因为您已经使用了,但它是一个令牌过滤器,因此它确实无法过滤掉某些字符,因为分析过程由以下三个连续步骤组成: 字符过滤器(这里您可以

在我的分析器中,我添加了asciifolding过滤器。在大多数情况下,这非常有效,但在使用丹麦语时,我不想规范æå字符,因为“rød”和“rod”是非常不同的单词

我们使用的是托管的弹性云集群,因此如果可能的话,我们需要一个不需要通过云平台进行任何非标准部署的解决方案

是否有任何方法可以进行ascifolding,但将某些字符列为白名单


当前在ES版本6.8上运行,因为您已经使用了,但它是一个令牌过滤器,因此它确实无法过滤掉某些字符,因为分析过程由以下三个连续步骤组成:

  • 字符过滤器(这里您可以过滤或替换某些字符)
  • 标记器(此过程生成标记)
  • 令牌过滤器(可以修改令牌发生器生成的令牌)
  • 没有现成的解决方案可以有效地解决您的问题(只需不规范化几个字符)

    参考ES书籍的权威指南文章

    您可以在令牌过滤器中使用参数,该参数会将原始令牌保留在相同的位置,但这存在相关性较低的问题,并提供与原始单词的精确匹配


    因此,在同一本书及其建议中,为不同字段中的原始含义编制索引,然后对大多数字段使用多匹配查询,更多信息可在中找到。

    您可能应该使用ICU折叠标记过滤器

    从:

    基于UTR#30的Unicode字符大小写折叠,如 类固醇上的ASCII折叠令牌过滤器

    它允许您执行AsciiFolding筛选器所执行的所有操作,但除此之外,它还允许您通过unicodeSetFilter属性忽略一系列字符

    在本例中,您希望忽略æ,å,Æ,Ø,Ø:

    "unicodeSetFilter": "[^æøåÆØÅ]"
    
    完整示例:

    PUT icu_sample
    {
      "settings": {
        "index": {
          "analysis": {
            "analyzer": {
              "danish_analyzer": {
                "tokenizer": "icu_tokenizer",
                "filter": [
                  "danish_folding",
                  "lowercase"
                ]
              }
            },
            "filter": {
              "danish_folding": {
                "type": "icu_folding",
                "unicodeSetFilter": "[^æøåÆØÅ]"
              }
            }
          }
        }
      }
    }
    

    这看起来非常有希望,并且AnalysisICU插件在云平台上是标准的。我会试试这个,我肯定它会帮你解决的。如果您希望其他斯堪的纳维亚国家能够使用他们自己的ö/ø、ä/æ等版本查找您的内容,而不破坏特殊字符的含义,我也可以推荐“斯堪的纳维亚ä正常化”过滤器()。@mortenbook,您能解决您的问题吗?