ElasticSearch-Haystack:西班牙语Tokenizer“失败”

时间:2014-08-20 07:57:25

标签: python django elasticsearch django-haystack

我正在使用:

  • Haystack - 2.1.0
  • ElasticSearch - 0.90.3
  • pyelasticsearch - 0.6

我已经配置了一个自定义后端来更改默认的Elasticsearch设置并使用西班牙语分析器。

我正在使用此设置进行Elasticsearch:

"settings" : {

        "index": {
            "uuid": "IPwcMthwRpSJzpjtarc9eQ",
            "analysis": {
               "analyzer": {
                  "default": {
                     "filter": ["standard", "lowercase", "asciifolding", ],
                     "tokenizer": "standard"
                  }
               }
            },
            "number_of_replicas": "1",
            "number_of_shards": "10",
        }
    },
    "analyzer": {
            "spanish": {
              "tokenizer":  "standard",
              "filter": [
                "lowercase",
                "spanish_stop",
                "spanish_keywords",
                "spanish_stemmer"
              ]
            }
    }

我在这里的一些答案中读到了这个设置。当我将此设置应用于ElasticSearch并重新索引我的模型时,我得到了一个我不确定理解的行为。

我有一些像“Ciencias”这样的名字的对象和其他类似“Ciéncies”的对象当我像“ciencias”这样的搜索时,我会收到名为“Ciencias”和“Ciéncies”的对象,当我搜索时也会出现同样的情况“ciencies”或“ciéncies”。


我希望ElasticSearch忽略重音,这就是我使用asciifolding并使用西班牙语标记器的原因,因为大部分文本都是西班牙语。我不明白为什么使用像“cienciAs”和“cienciEs”这样的不同词语会得到相同的结果。

为什么会这样?是因为默认的ngram分析器正在拆分单词吗?

为什么要搜索“cienciAs”我会得到名为“ciénciEs”的对象作为结果?

2 个答案:

答案 0 :(得分:1)

可能是因为限制器正在完成它的工作。如果您想知道在令牌化或词干化时会发生什么,请安装inquisitor plugin并转到分析器选项卡(参见here

答案 1 :(得分:0)

最后我删除了西班牙语分析器,一切都按预期开始工作。

现在我只使用AsciifoldingLowercase过滤器和重音符号,并且ñ被很好地编入索引,我对cienciasciencies没有问题