elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest" /> elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest" />

Java &引用;MapperParsingException[Analyzer[second]未为字段[Name]]找到;

Java &引用;MapperParsingException[Analyzer[second]未为字段[Name]]找到;,java,elasticsearch,elasticsearch-jest,Java,elasticsearch,Elasticsearch Jest,我已使用以下设置在Elasticsearch中创建了索引: { "my_index" : { "aliases" : { }, "mappings" : { }, "settings" : { "index" : { "creation_date" : "1461229073677", "uuid" : "7-TECarfRs6XO8yZE7SeWA", "number_of_replicas" : "1",

我已使用以下设置在Elasticsearch中创建了索引:

{
  "my_index" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1461229073677",
        "uuid" : "7-TECarfRs6XO8yZE7SeWA",
        "number_of_replicas" : "1",
        "number_of_shards" : "5",
        "version" : {
          "created" : "1040599"
        },
        "settings" : {
          "analysis" : {
            "analyzer" : {
              "second" : {
                "type" : "custom",
                "filter" : [ "lowercase", "synonym" ],
                "tokenizer" : "standard"
              }
            },
            "filter" : {
              "synonym" : {
                "type" : "synonym",
                "synonyms" : [ "i pad => ipad", "smart phone => smartphone" ]
              }
            }
          }
        }
      }
    },
    "warmers" : { }
  }
}
现在,我尝试使用以下代码设置映射:

PutMapping putMapping = new PutMapping.Builder(
        "my_index",
        "my_index_type",
        "{ \"properties\" : { \"Name\" : {\"type\" : \"string\", \"analyzer\" : \"second\"} } }"
).build();


JestResult result = client.execute(createIndex);
result =    client.execute(putMapping);
编辑

我用来创建索引的代码是:

CreateIndex createIndex =  new CreateIndex.Builder(indexName)
.settings( 
        ImmutableSettings.builder()
                .loadFromClasspath(
                        "settings.json"
                ).build().getAsMap()
).build();
JestResult result = client.execute(createIndex);
settings.json如下所示:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "second": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "synonym"
          ]
        }
      },
      "filter": {
        "synonym" : {
            "type" : "synonym",
            "synonyms" : [
                "i pad => ipad",
                "smart phone => smartphone",
                "i phone => iphone"
                ]             
                    }
                }
        }

  }
}
但是,我不断得到以下错误:

"MapperParsingException[Analyzer [second] not found for field [message]]"
如果我移除“analyzer”,我可以设置映射。因此,似乎我有两个“settings”部分,但无论我如何构造“settings.json”文件,我总是得到这两个部分。我查看了JEST page中指定的示例,但没有帮助我


有什么想法吗?

您正在使用的设置没有正确定义,即您有两个重叠的
设置
部分,索引设置应该如下所示:

{
  "my_index": {
    "aliases": {},
    "mappings": {},
    "settings": {
      "index": {
        "number_of_replicas": "1",
        "number_of_shards": "5"
      },
      "analysis": {
        "analyzer": {
          "second": {
            "type": "custom",
            "filter": [
              "lowercase",
              "synonym"
            ],
            "tokenizer": "standard"
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms": [
              "i pad => ipad",
              "smart phone => smartphone"
            ]
          }
        }
      }
    },
    "warmers": {}
  }
}
更新

您的
settings.json
文件只需包含以下内容:

{
  "analysis": {
    "analyzer": {
      "second": {
        "type": "custom",
        "filter": [
          "lowercase",
          "synonym"
        ],
        "tokenizer": "standard"
      }
    },
    "filter": {
      "synonym": {
        "type": "synonym",
        "synonyms": [
          "i pad => ipad",
          "smart phone => smartphone"
        ]
      }
    }
  }
}

您正在使用的设置未正确定义,即您有两个重叠的
设置
部分,索引设置应如下所示:

{
  "my_index": {
    "aliases": {},
    "mappings": {},
    "settings": {
      "index": {
        "number_of_replicas": "1",
        "number_of_shards": "5"
      },
      "analysis": {
        "analyzer": {
          "second": {
            "type": "custom",
            "filter": [
              "lowercase",
              "synonym"
            ],
            "tokenizer": "standard"
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms": [
              "i pad => ipad",
              "smart phone => smartphone"
            ]
          }
        }
      }
    },
    "warmers": {}
  }
}
更新

您的
settings.json
文件只需包含以下内容:

{
  "analysis": {
    "analyzer": {
      "second": {
        "type": "custom",
        "filter": [
          "lowercase",
          "synonym"
        ],
        "tokenizer": "standard"
      }
    },
    "filter": {
      "synonym": {
        "type": "synonym",
        "synonyms": [
          "i pad => ipad",
          "smart phone => smartphone"
        ]
      }
    }
  }
}

是的,你是对的。我可以使用CURL创建带有一个“设置”部分的索引。但是,当我使用JEST库时,我总是得到两个。我编辑了我的问题,以便您可以看到我使用的“settings.json”。你能不能看一看,让我知道,如果需要以不同的方式构造它?Thnx,它工作了!我以前也尝试过(删除了“settings”部分),但实际情况是Eclipse没有更新“settings.json”,我一直得到相同的结构(使用双“settings”部分)。我花了一段时间才弄明白这一点,并且感到非常沮丧。现在,每次更改settings.json时,我都会刷新项目,以便Eclipse加载新更改的文件。干杯,谢谢你的帮助真棒,很高兴我能帮忙!!是的,你是对的。我可以使用CURL创建带有一个“设置”部分的索引。但是,当我使用JEST库时,我总是得到两个。我编辑了我的问题,以便您可以看到我使用的“settings.json”。你能不能看一看,让我知道,如果需要以不同的方式构造它?Thnx,它工作了!我以前也尝试过(删除了“settings”部分),但实际情况是Eclipse没有更新“settings.json”,我一直得到相同的结构(使用双“settings”部分)。我花了一段时间才弄明白这一点,并且感到非常沮丧。现在,每次更改settings.json时,我都会刷新项目,以便Eclipse加载新更改的文件。干杯,谢谢你的帮助真棒,很高兴我能帮忙!!