web-dev-qa-db-ja.com

Java APIを使用してカスタム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()もありません。私が見る限り。これを行う正しい方法は何ですか?

25
Felix

アナライザーは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();
28
imotov

テスト環境を使用している場合は、このプロジェクトを使用して、Javaアノテーションに基づいてインデックスを作成することもできます。 https://github.com/tlrx/elasticsearch-test

1