一尘不染

Elasticsearch:为Java客户端构建映射

elasticsearch

在我的elasticsearch.yml文件中,我尝试实现一些映射,其中使用不同的分析器将属于一种类型的一个字段索引到其余字段。

目前,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_

这不会将自定义分析器应用于标题字段,因此我希望有人可以为我指出将自定义分析器应用于各个字段的正确方向?


阅读 331

收藏
2020-06-22

共1个答案

一尘不染

我在ml中回答了这个问题:

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

如果您使用的是Spring,则可以查看ES spring工厂项目: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. 您还可以使用ES提供的XContent对象在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 ();

希望对您有帮助

2020-06-22