Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Analyzer在使用映射和设置创建索引时未找到异常_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java Analyzer在使用映射和设置创建索引时未找到异常

Java Analyzer在使用映射和设置创建索引时未找到异常,java,elasticsearch,Java,elasticsearch,嗨,我使用的是弹性搜索elasticsearch-0.90.2版本。我试图使用jsonBuilder将analyzer映射到自定义analyzer,在创建索引时,它会抛出类似analyzer not found的异常 设置:- XContentBuilder settings = XContentFactory.jsonBuilder() .startObject() .startObject("settings")

嗨,我使用的是弹性搜索elasticsearch-0.90.2版本。我试图使用jsonBuilder将analyzer映射到自定义analyzer,在创建索引时,它会抛出类似analyzer not found的异常

设置:-

       XContentBuilder settings = XContentFactory.jsonBuilder()
            .startObject()
                 .startObject("settings")
                      .startObject("analysis")
                           .startObject("analyzer")                 
                                .startObject("search_analyzer")             
                                      .field("tokenizer", "ngram_specification")
                                      .field("type", "custom")
                                      .field("filter", new String[]{ "ngram_specification"})
                                .endObject()
                            .endObject()
                            .startObject("ngram_specification")
                                 .field("type", "nGram")
                                 .field("min_gram", "2")
                                 .field("max_gram", "5")
                            .endObject()    
                      .endObject()
                 .endObject()
            .endObject();
映射:-

  XContentBuilder mapping = XContentFactory.jsonBuilder()

      .startObject()
             .startObject("sample")
                 .startObject("properties")
                     .startObject("email").field("type", "string").field("index", "analyzed").field("analyzer", "search_analyzer")
                     .endObject()
                 .endObject()
            .endObject()
      .endObject();
创建如下索引:-

        CreateIndexRequest indexRequest = new CreateIndexRequest(indexName);
        indexRequest.settings(settings);
        indexRequest.mapping("sample", mapping);
        CreateIndexResponse response = client.admin().indices().create(indexRequest).actionGet();
例外情况:

    17:00:52,767 ERROR [STDERR] org.elasticsearch.index.mapper.MapperParsingException: mapping [3]
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:289)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.cluster.service.InternalClusterService$2.run(InternalClusterService.java:229)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:95)
    17:00:52,767 ERROR [STDERR]     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    17:00:52,767 ERROR [STDERR]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    17:00:52,767 ERROR [STDERR]     at java.lang.Thread.run(Thread.java:662)
    17:00:52,767 ERROR [STDERR] Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [search_analyzer] not found for field [email]
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:100)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.core.StringFieldMapper$TypeParser.parse(StringFieldMapper.java:151)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:263)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parse(ObjectMapper.java:219)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:176)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:380)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:190)
    17:00:52,767 ERROR [STDERR]     at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:286)]    

有人能告诉你这种方法的错误吗?

你可以使用

我认为由于设置配置中的错误,您的analyzer尚未创建。
tokenizer
条目可能丢失。以下是更正的版本:

  XContentBuilder settings = XContentFactory.jsonBuilder()
        .startObject()
             .startObject("settings")
                  .startObject("analysis")
                       .startObject("analyzer")                 
                            .startObject("search_analyzer")             
                                  .field("tokenizer", "ngram_specification")
                                  .field("type", "custom")
                                  .field("filter", new String[]{ "ngram_specification"})
                            .endObject()
                        .endObject()
                        .startObject("tokenizer")
                             .startObject("ngram_specification")
                                  .field("type", "nGram")
                                  .field("min_gram", "2")
                                  .field("max_gram", "5")
                             .endObject()    
                        .endObject()    
                  .endObject()
             .endObject()
        .endObject();

我找到了解决办法。在设置中,如果您使用“索引”而不是“设置”,那么它将正常工作

这是错误的:

XContentBuilder settings = XContentFactory.jsonBuilder()
    .startObject()
         .startObject("settings") // "settings"
              .startObject("analysis")
但这确实:


好的!乍一看,我认为过滤器也不见了。我做了这里提到的更改。仍然找不到相同的错误分析器:(请参阅为什么使用索引而不是设置?
XContentBuilder settings = XContentFactory.jsonBuilder()
    .startObject()
         .startObject("index") // "index" instead of "settings"
              .startObject("analysis")