使用Java API定义自定义ElasticSearch Analyzer

时间:2011-06-08 07:50:36

标签: elasticsearch

有没有办法创建索引并使用Java API指定自定义分析器?它支持在创建索引时添加映射,但是如果不通过HTTP PUT发送JSON,我找不到这样的方法:

curl -XPUT localhost:9200/twitter?pretty=true -d '{
"analysis": {
       "analyzer": {
            "steak" : {
                "type" : "custom", 
                "tokenizer" : "standard",
                "filter" : ["snowball", "standard", "lowercase"]
            }
        }
    }
}'

我可以使用JSONBuilder构建这样的查询,但我找不到API在哪里运行它,CreateIndexRequest没有我可以使用的任何内容,client.admin().indices()也没有,据我所知。什么是正确的方法?

2 个答案:

答案 0 :(得分:27)

您可以使用client.admin().indices().prepareCreate("twitter").setSettings(...)设置分析器。有几种方法可以构建设置。您可以从文本,地图加载它们,甚至可以使用jsonBuilder,如果这是您想要的:

client.admin().indices().prepareCreate("twitter")
            .setSettings(Settings.settingsBuilder().loadFromSource(jsonBuilder()
                .startObject()
                    .startObject("analysis")
                        .startObject("analyzer")
                            .startObject("steak")
                                .field("type", "custom")
                                .field("tokenizer", "standard")
                                .field("filter", new String[]{"snowball", "standard", "lowercase"})
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject().string()))
            .execute().actionGet();

答案 1 :(得分:1)

如果您处于测试环境中,您还可以使用此项目,该项目将基于Java注释创建索引。 https://github.com/tlrx/elasticsearch-test