Spring-Data-Elasticsearch设置:Spring无法找到配置文件?

时间:2015-08-13 15:16:18

标签: java spring elasticsearch spring-data spring-data-elasticsearch

使用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
        }
      }

    }

  }
}

1 个答案:

答案 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

应该这样做