私は現在spring-data-elasticsearch
APIと戦っています。いくつかのインデックスが指しているエイリアスで動作する必要があります。
各インデックスには同じタイプが格納されていますが、日々のストレージにのみ使用されます (最初のインデックスは月曜日の結果、2 番目のインデックスは火曜日の結果です....)。
エイリアスが原因で一部のElasticsearchRepository
メソッドが機能しません。現在、なんとか検索 ( findOne() equivalent
) を実行できましたが、エンティティを更新できません。
それを達成する方法がわかりません。ドキュメントとサンプルを調べましたが、行き詰まっています。
私のリポジトリ
public interface EsUserRepository extends ElasticsearchRepository<User, String>
{
@Query("{\"bool\" : {\"must\" : {\"term\" : {\"id_str\" : \"?0\"}}}}")
User findByIdStr(String idStr);
}
私のエンティティ
@Document(indexName = "osintlab", type = "users")
public class User
{
// Elasticsearch internal id
@Id
private String id;
// Just a test to get the real object index (_index field), in order to save it
@Field(index = FieldIndex.analyzed, type = FieldType.String)
private String indexName;
// Real id, saved under the "id_str" field
@Field(type = FieldType.String)
private String id_str;
@Field(type = FieldType.String)
private List<String> tag_user;
}
私がテストしたこと
final IndexQuery indexQuery = new IndexQuery();
indexQuery.setId(user.getId());
indexQuery.setObject(user);
esTemplate.index(indexQuery);
userRepository.index(user));
userRepository.save(user))