我正在使用:
我已经配置了一个自定义后端来更改默认的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”的对象作为结果?
答案 0 :(得分:1)
可能是因为限制器正在完成它的工作。如果您想知道在令牌化或词干化时会发生什么,请安装inquisitor plugin并转到分析器选项卡(参见here)
答案 1 :(得分:0)
最后我删除了西班牙语分析器,一切都按预期开始工作。
现在我只使用Asciifolding
和Lowercase
过滤器和重音符号,并且ñ被很好地编入索引,我对ciencias
和ciencies
没有问题