Spring boot統合Elasticsearch
3109 ワード
1.概要
前にElasticsearchの簡単な基本操作、例えばインストール、基本的な操作コマンドなどを学びましたが、今日はesとSpring bootの簡単な統合を見て、削除・変更機能を実現します.Spring bootは、redis、mongodbなどの複数のNoSqlデータベースをサポートしていることはよく知られており、elasticsearchもその1つです.さらにSpring bootの一貫した自動化構成を実現し、使い勝手も抜群です.
2.新規プロジェクト
spring bootプロジェクトを新規作成し、NoSqlの欄でElasticsearchを選択します.
次に、プロファイルにesの構成を追加します.
ここでは、esデフォルトの9200ポートではなく、クラスタの9300ポートが使用されていることに注意してください.cluster-nameのデフォルトはelasticsearchで、書かなくてもいいです.
3.簡単な操作
プロジェクトが完成したら、簡単な操作を試してみてください.Spring Data Jpaを使ったことがある限り、使い方が似ているので、理解するのは簡単です.
1.まず、esのドキュメントとして格納されるエンティティクラスのデータを表すエンティティクラスを新規作成する必要があります.
@Document注記ではindexとtypeの名前を指定できます.
2.それからJpaのプログラムを使うのと同じように、dao層のインタフェースを新しく作って、ElasticsearchRepositoryインタフェースを継承して、それからこのインタフェースの中でいくつかのカスタマイズの方法を書くことができて、ここで私達は簡単な削除と検索を実現して、自分で支持することができて、だから方法を書き換える必要はありません.
論理的にサービス層を書く必要がありますが、ここでは簡単にするためにdao層で直接テストします.
ここで修正と追加の操作は類似しており、エンティティクラスのデータを変更して格納すればよいが、idは変わらないだけで、そうでなければ新しいレコードが作成される.
クエリーの操作に重点を置く必要があります.esは効率的な検索をサポートするので、このインタフェースを直接利用して検索操作を実現することができ、ページを分けたり、ソートしたりすることができます.
すべてのテストコードは次のとおりです.
Jpaのインタフェースを使用するだけでなく、ElasticsearchTemplateを使用してesの操作を実現することもでき、注入するだけで使用できます.
前にElasticsearchの簡単な基本操作、例えばインストール、基本的な操作コマンドなどを学びましたが、今日はesとSpring bootの簡単な統合を見て、削除・変更機能を実現します.Spring bootは、redis、mongodbなどの複数のNoSqlデータベースをサポートしていることはよく知られており、elasticsearchもその1つです.さらにSpring bootの一貫した自動化構成を実現し、使い勝手も抜群です.
2.新規プロジェクト
spring bootプロジェクトを新規作成し、NoSqlの欄でElasticsearchを選択します.
次に、プロファイルにesの構成を追加します.
spring:
data:
elasticsearch:
cluster-nodes: 192.168.66.135:9300
repositories:
enabled: true
cluster-name: elasticsearch
ここでは、esデフォルトの9200ポートではなく、クラスタの9300ポートが使用されていることに注意してください.cluster-nameのデフォルトはelasticsearchで、書かなくてもいいです.
3.簡単な操作
プロジェクトが完成したら、簡単な操作を試してみてください.Spring Data Jpaを使ったことがある限り、使い方が似ているので、理解するのは簡単です.
1.まず、esのドキュメントとして格納されるエンティティクラスのデータを表すエンティティクラスを新規作成する必要があります.
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "product", type = "computer")
public class Product {
private String id;
private String name;
private double price;
private String brand;
private String color;
}
@Document注記ではindexとtypeの名前を指定できます.
2.それからJpaのプログラムを使うのと同じように、dao層のインタフェースを新しく作って、ElasticsearchRepositoryインタフェースを継承して、それからこのインタフェースの中でいくつかのカスタマイズの方法を書くことができて、ここで私達は簡単な削除と検索を実現して、自分で支持することができて、だから方法を書き換える必要はありません.
/**
* @author RoseDuan
*/
public interface ProductRepository extends ElasticsearchRepository {
}
論理的にサービス層を書く必要がありますが、ここでは簡単にするためにdao層で直接テストします.
ここで修正と追加の操作は類似しており、エンティティクラスのデータを変更して格納すればよいが、idは変わらないだけで、そうでなければ新しいレコードが作成される.
クエリーの操作に重点を置く必要があります.esは効率的な検索をサポートするので、このインタフェースを直接利用して検索操作を実現することができ、ページを分けたり、ソートしたりすることができます.
すべてのテストコードは次のとおりです.
@SpringBootTest
@RunWith(SpringRunner.class)
public class ProductRepositoryTest {
@Autowired
private ProductRepository productRepository;
/**
*
*/
@Test
public void testAdd(){
Product product = Product.builder()
.id("JX1125630000").name(" ")
.price(5996).brand("Mac").color(" ")
.build();
productRepository.save(product);
}
/**
*
*/
@Test
public void testDelete(){
productRepository.deleteById("JX1125630000");
}
/**
*
*/
@Test
public void testSearch() {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices("product").withTypes("computer")
.withQuery(QueryBuilders.matchQuery("brand", " "))
.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC))
.build();
Page result = productRepository.search(searchQuery);
List content = result.getContent();
for (Product product : content){
System.out.println(product.toString());
}
}
}
Jpaのインタフェースを使用するだけでなく、ElasticsearchTemplateを使用してesの操作を実現することもでき、注入するだけで使用できます.