如何在ElasticSearch中添加分析仪设置? [英] How to add analyzer settings in ElasticSearch?

查看:241
本文介绍了如何在ElasticSearch中添加分析仪设置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using ElasticSearch 1.5.2 and I wish to have the following settings :

"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"
            ]
        }
    }
  }
}    

我应该在哪里添加?我的意思是在创建索引之前或之后?

Where should I add them? I mean before index creation or after?

通过在线搜索,我发现了一些方法,如

By searching online I found some method like

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

但是我有两个问题,


  1. 我收到一个编译错误:类型为ImmutableSettings的方法loadFromSource .builder不适用于参数XContentBuilder

  1. I get a compile error : The method loadFromSource in the type ImmutableSettings.builder is not applicable for the arguments XContentBuilder

此外,我不知道如何将我的设置转换为这种格式,文档在哪里得到知道所有这些方法?
我尝试阅读正式的ElasticSearch JAVA API https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/ search.html ,但我无法找到有关设置分析器的任何内容。
我发现的所有相关内容只是REST API的形式,而不是Java API。

Also, I don't know how to convert my settings to this format. And where is the documentation to get to know about all these methods? I tried reading the official ElasticSearch JAVA API https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html but I was unable to find anything about setting up analyzers. All the related content I find is only in the form of REST APIs and not in Java API.

任何一种帮助将不胜感激。

Any kind of help would be appreciated.

推荐答案

XContentBuilder 语法,可用于创建一个json对象。

XContentBuilder have specific syntax , can be used to create a json object.

您可以按照 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index_.html#helpers 将您的字符串转换为 XContentBuilder 格式。

You can follow https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index_.html#helpers to convert your string to XContentBuilder format.

如果您在应用程序中加载了相同的字符串。
你只需要做。

If you have same string loaded in application. You simply can do.

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

简单的工作。

如果你想知道json在XContentBuilder中的外观,那么这里就是

If you want to know how the json will look like in XContentBuilder, then here it is,

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

这篇关于如何在ElasticSearch中添加分析仪设置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆