使用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 ,当我使用curl检查映射时,我没有得到我在 elasticsearch_config.json 中定义的所有映射:
curl -X GET "localhost:9200/test/_mapping?pretty=true"
我的猜测是Spring无法正确找到 elasticsearch_config.json 。 但是我已经检查过 myproject / src / main / resources 是否在我项目的构建路径中......
感谢您的帮助,谢谢!
备注:
我找到了可能有效的this解决方案,但是:
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
}
}
}
}
}
答案 0 :(得分:5)
终于找到了为什么它不起作用!!
与Val说,我将 elasticsearch_config.json 文件分解为 settings.json 和 mappings.json 。
我的项目/ src / main / ressources架构:
- mappings
+ mappings.json
- settings
+ settings.json
并且
@Document(indexName = "test", type="SentimentTweet")
@Setting(settingPath = "/settings/settings.json")
@Mapping(mappingPath = "/mappings/mappings.json")
但是,在 mappings.json 中,我应该省略字段 mappings 并直接放置映射的内容。
INSTEAD OF:
{
"mappings": {
"Tweet": {
/* MAPPINGS CONFIGURATION ARE OMITTED */
}
}
}
仅在mappings.json中写入:
{
"Tweet": {
/* MAPPINGS CONFIGURATION ARE OMITTED */
}
}
对settings.json
应该这样做