如何在elasticsearch中添加analyzer设置?

r1zk6ea1  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(519)

我正在使用elasticsearch 1.5.2,我希望有以下设置:

"settings": {
"analysis": {
    "filter": {
        "filter_shingle": {
            "type": "shingle",
            "max_shingle_size": 2,
            "min_shingle_size": 2,
            "output_unigrams": false
        },
        "filter_stemmer": {
            "type": "porter_stem",
            "language": "English"
        }
    },
    "tokenizer": {
        "my_ngram_tokenizer": {
            "type": "nGram",
            "min_gram": 1,
            "max_gram": 1
        }
    },
    "analyzer": {
        "ShingleAnalyzer": {
            "tokenizer": "my_ngram_tokenizer",
            "filter": [
                "standard",
                "lowercase",
                "filter_stemmer",
                "filter_shingle"
            ]
        }
    }
  }
}

我应该在哪里添加它们?我是说在创建索引之前还是之后?
通过网上搜索,我找到了一些方法,比如

client.admin().indices().prepareCreate("temp_index").setSettings(ImmutableSettings.settingsBuilder().loadFromSource((jsonBuilder()
    .startObject()
       .startObject("analysis")
          .startObject("analyzer")......and so on)

但我有两个问题,
我得到一个编译错误:immutablesettings.builder类型中的loadfromsource方法不适用于参数xcontentbuilder
另外,我不知道如何将我的设置转换成这种格式。关于这些方法的文档在哪里?我试着阅读官方的elasticsearch javaapihttps://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html 但我找不到任何关于设置分析仪的信息。我找到的所有相关内容都只是restapi的形式,而不是javaapi。

u0sqgete

u0sqgete1#

XContentBuilder 有特定的语法,可以用来创建一个json对象。
你可以跟着https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index_.html#helpers 将字符串转换为 XContentBuilder 格式。
如果在应用程序中加载了相同的字符串。你可以做到的。

client.admin().indices()
.prepareCreate("index_name").setSettings("{setting _ json _ string }").get()

就行了。
如果您想知道json在xcontentbuilder中是什么样子的,那么就在这里,

XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
        .startObject()
            .startObject("analysis")
                .startObject("filter")
                    .startObject("filter_shingle")
                        .field("type","shingle")
                        .field("max_shingle_size",2)
                        .field("min_shingle_size",2)
                        .field("output_unigrams",false)
                    .endObject()
                    .startObject("filter_stemmer")
                        .field("type","porter_stem")
                        .field("language","English")
                    .endObject()
                .endObject()
                .startObject("tokenizer")
                    .startObject("my_ngram_tokenizer")
                        .field("type","nGram")
                        .field("min_gram",1)
                        .field("max_gram",1)
                    .endObject()
                .endObject()
                .startObject("analyzer")
                    .startObject("ShingleAnalyzer")
                        .field("tokenizer","my_ngram_tokenizer")
                        .array("filter","standard","lowercase","filter_stemmer","filter_shingle")
                    .endObject()
                .endObject()
            .endObject()
        .endObject()

client.admin().indices()
.prepareCreate("index_name").setSettings(settingsBuilder).get()

相关问题