java - elasticsearch 分词器设置

标签 java elasticsearch

我想将以下状态更改为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() 的错误

请告诉我。 提前致谢。

最佳答案

您的 startObject()/endObject() 似乎与您发布的 JSON 版本不对应。

我认为 .startObject("tokenizer") 之前缺少 endObject()。我会做类似的事情:

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();

如果不起作用,请向我们提供完整的错误堆栈跟踪。这会很有帮助。

关于java - elasticsearch 分词器设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17568255/

相关文章:

java - 从右手方向在 JAVA 中使用子字符串

java - XHTML 模式下的 Struts 1 可以有 2 个表单提交到同一操作吗?

elasticsearch - 如何将Kibana Pod连接到Kubernetes中的Elastic集群

elasticsearch - Wagtail 1.10.1 Elasticsearch 问题

docker - 无法设置docker-compose文件以启动版本7.3.2的kibana

java - super 强大的 SDK Android

java - OCR Tesseract - Tess4J 行为怪异

java - 从字符串创建 JSONArray Android - Java

elasticsearch - Elasticsearch:操作AND,然后对查询字符串函数进行OR

elasticsearch - 如何计算Elasticsearch中两个字段之间的差异?