一尘不染

使用Java API定义自定义ElasticSearch Analyzer

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()地方。什么是正确的方法?


阅读 405

收藏
2020-06-22

共1个答案

一尘不染

您可以使用设置分析仪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();
2020-06-22