我在Drupal中创建了一个索引,我的查询有效。 现在我尝试在elasticsearch.yml文件中添加小写和asciifolding过滤器,但是没有成功:
我添加这些行:
{{1}}
我有一个错误:IndexCreationException:[myindex]无法创建索引。 但是'myindex'已经存在,我只是尝试为现有索引添加过滤器。
如何添加这些过滤器以使索引对我来说正确?
非常感谢你的帮助。
答案 0 :(得分:0)
您获得此异常的原因是因为无法通过调用常规create index端点来更新索引的设置。为了更新分析仪,您必须调用“设置”。端点。
我为你做了一个小例子:
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"new_analyzer": {
"tokenizer": "standard"
}
}
}
}
}
GET test/_analyze
{
"analyzer": "new_analyzer",
"text": "NoLowercasse"
}
POST test/_close
PUT test/_settings
{
"analysis": {
"analyzer": {
"new_analyzer": {
"tokenizer": "standard",
"filter": [
"asciifolding",
"lowercase"
]
}
}
}
}
POST test/_open
GET test/_analyze
{
"analyzer": "new_analyzer",
"text": "LowerCaseAdded"
}
响应:
{
"tokens": [
{
"token": "lowercaseadded",
"start_offset": 0,
"end_offset": 14,
"type": "<ALPHANUM>",
"position": 0
}
]
}
您可以看到在第二次分析后,正在应用小写过滤器。您必须关闭索引的原因是因为它需要重建分析器。您会注意到新的分析器不能按预期工作,因为之前添加的文档没有使用此分析器编制索引,而是没有asciifolding和小写的文档。 为了解决这个问题,您必须重建索引(例如Reindex-API)
希望这有帮助!
编辑:我的回复速度可能太快,因为这不是Drupal-Elastic解决方案,但它可能会指向正确的方向。说实话,我不熟悉与Drupal一起运行ES。