通过Spring-Data-Elasticsearch,我试图使用在 elasticsearch_config.json中 定义的分析器和映射。 该JSON文件位于 / src / main / resources 文件夹中。
我的JAVA模型如下所示:
@Document(indexName = "test", type="Tweet") @Setting(settingPath = "/elasticsearch_config.json") public class Tweet { @Id private String idStr; /** other fields, getters and setters are omitted **/ }
elasticsearch_config.json 包含设置和映射:
{ "settings": { /* some filters */}, "mappings": { /* some types' mappings*/ } }
我尝试了curl,索引/搜索没有问题。
我的问题 :
我想使用 @Setting 配置我的映射(而不是curl),但是 @Setting 注释似乎不起作用。随着 @Setting ,当我用卷曲来检查我的映射,我没有得到我所定义的所有映射 elasticsearch_config.json :
curl -X GET "localhost:9200/test/_mapping?pretty=true"
我的猜测是Spring无法正确找到 elasticsearch_config.json 。但是我已经检查过 myproject / src / main / resources 在我项目的构建路径中了…
感谢您的帮助,谢谢!
注意 :我发现此解决方案可能有效,但是: 1.我不知道nodeBuilder的来源。2.我可能错了,但是,不是仅使用 @Setting 的解决方案吗?
更新:我的映射 我将分析器与映射分开。 mappings.json 看起来像这样:
{ "mappings": { "Tweet": { "_id": { "path":"idStr", "properties": { "idStr": { "type":"string", "index":"not_analyzed", "store":true } } }, "numeric_detection" : true, "dynamic_templates": [ { "id_fields": { "match":"userId*", "match_mapping_type": "string", "mapping": { "type":"string", "index":"no", "store":true } } }, { "name_fields": { "match":"*Name", "match_mapping_type": "string", "mapping": { "type":"string", "index":"no", "store":true } } } ], "properties": { "text": { "type": "string", "index":"analyzed", "analyzer":"custom_analyzer", "store": true }, "createdAt": { "type": "date", "format": "yyyy-MM-dd", "index":"analyzed", "store": true }, "testVersion": { "type": "integer", "index":"not_analyzed", "store":false } } } } }
终于发现为什么它不起作用了!!
就像Val所说的那样,我将我的 elasticsearch_config.json 文件分解为 settings.json 和 mappings.json 。
我的项目/ src / main /资源架构:
- mappings + mappings.json - settings + settings.json
和
@Document(indexName = "test", type="SentimentTweet") @Setting(settingPath = "/settings/settings.json") @Mapping(mappingPath = "/mappings/mappings.json")
但是,在 mappings.json中 ,我应该省略字段 映射, 并直接放置 映射 的内容。
代替:
{ "mappings": { "Tweet": { /* MAPPINGS CONFIGURATION ARE OMITTED */ } } }
只写在mappings.json中:
{ "Tweet": { /* MAPPINGS CONFIGURATION ARE OMITTED */ } }
应该对settings.json做同样的事情