通过grails插件将自定义分析器添加到elasticsearch

时间:2016-01-24 10:03:21

标签: grails elasticsearch groovy elasticsearch-plugin

我正在尝试通过grails插件向elasticsearch添加自定义分析器。我能够使用域上的“可搜索”将使用过的分析仪更改为通用分析仪:

static searchable = {
        all = [analyzer: 'snowball']
    }

但无法让它知道costum分析仪。目前还不清楚如何将REST API中的以下json转换为groovy闭包:

PUT /my_index
{
  "settings": {
    "analysis": {
      "filter": {
        "my_synonym_filter": {
          "type": "synonym", 
          "synonyms": [ 
            "british,english",
            "queen,monarch"
          ]
        }
      },
      "analyzer": {
        "my_synonyms": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "my_synonym_filter" 
          ]
        }
      }
    }
  }
}

this问题似乎有同样的问题,但答案不起作用,this回答表明这可能不可行,但这似乎不合理,因为设置自定义分析器是非常基本的。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为有两种方法可以帮助您实现这一目标。

第一种方法是使用注入的elasticSearchHelper浏览low level API并直接访问ES客户端。

    elasticSearchHelper.withElasticSearch { client ->
        // Do some stuff with the ElasticSearch client
        client.admin()
            .indices()
            .prepareCreate(indexName)
            .setSettings(settings)       <--- your settings/analyzers go here
            .execute()
            .actionGet()
    }

第二种方法涉及使用ElasticSearchAdminService service的未记录的功能,即createIndex() method,它允许您在创建新索引时传递所需的设置和分析器。后者基本上与上面的第一个选项完全相同,但您可以直接使用Grails服务。