2012-10-04 163 views
3

在我的elasticsearch.yml文件中,我試圖實現一些映射,其中一個屬於一個類型的字段使用不同的分析器索引到其餘的映射。Elasticsearch:構建Java客戶端的映射

目前YAML文件的結構如下:

index: 
    bookshelf: 
    types: 
     book: 
     mappings: 
      title: {analyzer: customAnalyzer} 
    analysis: 
    analyzer: 
     # set standard analyzer with no stop words as the default 
     default: 
     type: standard 
     stopwords: _none_ 
     # set custom analyser to provide relative search results 
     customAnalyzer: 
     type: custom 
     tokenizer: nGramTokenizer 
     filter: [lowercase,stopWordsFilter,asciifolding] 
    tokenizer: 
     nGramTokenizer: 
     type: nGram 
     min_gram: 1 
     max_gram: 2 
    filter: 
     nGramFilter: 
     type: nGram 
     min_gram: 1 
     max_gram: 2 
     stopWordsFilter: 
     type: stop 
     stopwords: _none_ 

這並不適用於自定義分析的標題字段,所以我希望有人也許能夠指出我朝着正確的方向將定製分析儀到個別領域?

+0

你知道爲什麼你的customAnalyzer沒有被應用到標題字段嗎?我無法從被接受的答案中感知 –

+0

@BrianWebster不,我無法使其工作。我把它列入積壓,並有意回到它。如果您成功實施自定義分析儀,請將您的解決方案添加到此問題中。謝謝 –

+0

會做。我在這個過程中還是新手。但是,我想知道它是否有可能被應用,而且很難發現?例如,我不相信ES有辦法查看令牌(應用分析器的結果)。你能列出你正在使用的測試用例嗎? –

回答

6

我在毫升回答了這個:

如果您使用的是Java,你不必使用YML文件。你可以,但你不必。

如果你使用Spring,你可以看看ES彈簧廠項目:https://github.com/dadoonet/spring-elasticsearch

如果不是,則使用Java創建索引和映射不同的方式:

  1. 你可以看看這裏看我如何做這個通過讀取JSON 映射文件:提供 https://github.com/dadoonet/spring-elasticsearch/blob/master/src/main/java/fr/pilato/spring/elasticsearch/ElasticsearchAbstractClientFactoryBean.java#L616

  2. 您還可以使用XContent對象通過ES建立你 映射在Java中: https://github.com/dadoonet/rssriver/blob/master/src/test/java/org/elasticsearch/river/rss/RssRiverTest.java#L14

  3. 使用該對象在這裏描述:https://github.com/dadoonet/rssriver/blob/master/src/test/java/org/elasticsearch/river/rss/AbstractRssRiverTest.java#L98

添加映射如下:

node .client() .admin() .indices() 
.preparePutMapping ("yourindex") 
.setType ("yourtype") 
.setSource (mapping()) 
.execute() .actionGet(); 

我希望這可以幫助你

+0

感謝您在此添加此答案以及David - 我喜歡能夠投票贊成有用的東西:)我仍然在玩這個,並試圖讓它爲我工作。 –