With Spring-Data-Elasticsearch, I am trying to use analyzers and mappings defined in elasticsearch_config.json.
This JSON file is in /src/main/resources
Finally found out why it was not working!!
Like Val said, I decomposed my elasticsearch_config.json file into settings.json and mappings.json.
My project/src/main/ressources architecture:
- mappings
+ mappings.json
- settings
+ settings.json
And
@Document(indexName = "test", type="SentimentTweet")
@Setting(settingPath = "/settings/settings.json")
@Mapping(mappingPath = "/mappings/mappings.json")
However, in mappings.json, I should omit the field mappings and DIRECTLY put the content of the mapping.
INSTEAD OF:
{
"mappings": {
"Tweet": {
/* MAPPINGS CONFIGURATION ARE OMITTED */
}
}
}
Only writes in mappings.json:
{
"Tweet": {
/* MAPPINGS CONFIGURATION ARE OMITTED */
}
}
The same should be done for settings.json
The @Setting
annotation should point to a file containing only the settings
part. If you also want to specify your custom mapping, you need to use the @Mapping
annotation and give it the path to your mapping file. It goes like this:
@Document(indexName = "test", type="Tweet")
@Setting(settingPath = "/settings/settings.json")
@Mapping(mappingPath = "/mappings/mappings.json")
public class Tweet {
@Id
private String idStr;
/** other fields, getters and setters are omitted **/
}
Then you need to store settings.json
in myproject/src/main/resources/settings/
and mappings.json
in myproject/src/main/resources/mappings/
.
That should work.