Elasticsearch。找不到自定义分析仪

时间:2017-02-08 18:30:13

标签: elasticsearch spring-boot spring-data spring-data-elasticsearch

我有这样的模特:

@Getter
@Setter
@Document(indexName = "indexName", type = "typeName")
@Setting(settingPath = "/elastic/elastic-setting.json")
public class Model extends BaseModel {
    @Field(type = FieldType.String, index = FieldIndex.analyzed, analyzer = "customAnalyzer")
    private String name;
}

我有弹性设置。内部../ resources / elastic / elastic-setting.json:

{
   "index": {
   "number_of_shards": "1",
   "number_of_replicas": "0",
   "analysis": {
     "analyzer": {
       "customAnalyzer": {
          "type": "custom",
          "tokenizer": "uax_url_email"
        }
      }
    }
  }
}

我清理我的弹性数据库,当我启动我的应用程序时,我有例外:

MapperParsingException[analyzer [customAnalyzer] not found for field [name]]

我的代码出了什么问题? 请帮帮我!

修改

Val ,我认为@Setting就像是@Document的一个补充,但看起来它们可以互换。 在我的情况下,我还有另一个模型,:

@Document(indexName = "indexName", type = "anotherTypeName")

所以,首先我创建一个名为" indexName"的索引。对于anotherModel,接下来当弹性准备Model时,它会看到名称为" indexName"的索引。已创建,他不使用@Setting。

现在我有另一个问题。 如何在java代码中为已创建的索引添加自定义分析器,例如在InitializingBean中。像我这样的分析器是什么?不 - 创造。是的 - 不要创造。

2 个答案:

答案 0 :(得分:1)

像这样修改您的elastic-setting.json文件:

{
   "index": {
      "number_of_shards": "1",
      "number_of_replicas": "0"
   },
   "analysis": {
     "analyzer": {
       "customAnalyzer": {
          "type": "custom",
          "tokenizer": "uax_url_email"
        }
      }
    }
  }
}

请注意,您需要先删除索引并重新创建它。

<强>更新

您当然可以通过Java代码添加自定义分析器,但是,您将无法更改现有的映射以便使用该分析器,因此您最好擦除索引并从头开始重新创建它一个合适的elastic-setting.json JSON文件。

答案 1 :(得分:0)

对于Val: 是的,我使用这样的东西。 以前,我在我的一个实体类中添加了@Setting,但是当我启动app时,已经创建了具有相同名称的索引,在Spring Data使用@Setting分析实体之前,并且索引未被修改,因为具有相同名称的索引是已经创建了。

现在我在抽象的baseModel上添加注释@Setting(path =“elastic-setting.json”),首先扫描高级层次结构类,并创建分析器。