如何在ElasticSearch中添加分析器设置?

时间:2015-05-25 08:50:41

标签: java indexing elasticsearch lucene analyzer

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

1. In Eclipse with Gradle plugin ... 
right-click > import > gradle and select the master project > build > select > ok
2. Choose 'apir' project > right-click > run on server > piviol tc Server is fine to use (or Tomcat)
3. Choose 'pivotal tc Server ' > Browse Deployment Location
4. Observe there ARE 'tomcat' jars in the wtpwebapps/apir/WEB-INF/lib directory

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

通过在线搜索,我找到了一些像

这样的方法
"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"
            ]
        }
    }
  }
}    

但我有2个问题,

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

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

1 个答案:

答案 0 :(得分:4)

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