Elasticsearch和Drupal:如何添加过滤器小写和asciifolding

时间:2017-04-03 08:50:55

标签: elasticsearch drupal-7

我在Drupal中创建了一个索引,我的查询有效。 现在我尝试在elasticsearch.yml文件中添加小写和asciifolding过滤器,但是没有成功:

我添加这些行:

{{1}}

我有一个错误:IndexCreationException:[myindex]无法创建索引。 但是'myindex'已经存在,我只是尝试为现有索引添加过滤器。

如何添加这些过滤器以使索引对我来说正确?

非常感谢你的帮助。

1 个答案:

答案 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。