簡體   English   中英

如何在ElasticSearch中添加分析儀設置?

[英]How to add analyzer settings in ElasticSearch?

我正在使用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)

但是我有2個問題,

  1. 我收到一個編譯錯誤:ImmutableSettings.builder類型的方法loadFromSource不適用於參數XContentBuilder

  2. 另外,我不知道如何將我的設置轉換為這種格式。 在哪里可以找到有關所有這些方法的文檔? 我嘗試閱讀官方的ElasticSearch JAVA API https://www.elastic.co/guide/zh-cn/elasticsearch/client/java-api/current/search.html,但找不到任何有關設置分析儀的信息。 我發現的所有相關內容僅以REST API的形式出現,而沒有以Java API的形式出現。

XContentBuilder具有特定的語法,可用於創建json對象。

您可以按照https://www.elastic.co/guide/zh-CN/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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM