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 版本不对应。

我认为 aendObject()之前缺少.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 回答