Spring boot統合Elasticsearch


1.概要
前に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の操作を実現することもでき、注入するだけで使用できます.