0

以下の状態をJAVAに変更したい。

curl -XPUT 'localhost:9200/test' -d '
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "my_ngram_analyzer" : {
                    "tokenizer" : "my_ngram_tokenizer"
                }
            },
            "tokenizer" : {
                "my_ngram_tokenizer" : {
                    "type" : "nGram",
                    "min_gram" : "2",
                    "max_gram" : "3",
                }
            }
        }
    }
}'

この問題を次のように解決しようとします。

client.admin().indices().prepareCreate("test")
        .setSettings(ImmutableSettings.settingsBuilder().loadFromSource(jsonBuilder()
            .startObject()
                .startObject("analysis")
                    .startObject("analyzer")
                        .startObject("my_ngram_analyzer")
                            .field("tokenizer", "my_ngram_tokenizer")    
                        .endObject()
                        .startObject("tokenizer")
                            .field("type", "nGram")    
                            .field("min_gram", "2")
                            .field("max_gram","3")
                        .endObject()

                    .endObject()
                .endObject()
            .endObject().string()))
        .execute().actionGet();

残念ながら、jsonBuilder() に関するエラーが発生しました。

私にお知らせください。前もって感謝します。

4

1 に答える 1

2

あなたのstartObject()/endObject()は、投稿した JSON バージョンに対応していないようです。

endObject()の前に a がないと思います.startObject("tokenizer")。私は次のようなことをします:

client.admin().indices().prepareCreate("test")
    .setSettings(ImmutableSettings.settingsBuilder().loadFromSource(jsonBuilder()
        .startObject()
            .startObject("analysis")
                .startObject("analyzer")
                    .startObject("my_ngram_analyzer")
                        .field("tokenizer", "my_ngram_tokenizer")    
                    .endObject()
                .endObject()
                .startObject("tokenizer")
                    .field("type", "nGram")    
                    .field("min_gram", "2")
                    .field("max_gram","3")
                .endObject()
            .endObject()
        .endObject().string()))
    .execute().actionGet();

うまくいかない場合は、完全なエラー スタック トレースを提供してください。それは役に立ちます。

于 2013-07-10T11:16:29.967 に答える