(6)spring-data-elasticseach 조작es

4816 단어 elasticsearch

소개


공식 문서 주소:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/
spring-data-elasticseach는 es에 대한 고차원 추상화를 제공하여 저장, 조회, 정렬, 분할 작업에 사용됩니다.

통합

  • 의존 추가
    
    			org.springframework.boot
    			spring-boot-starter-data-elasticsearch
    		
    		
    			org.springframework.boot
    			spring-boot-starter-web
    		
    		
    		
    			org.springframework.boot
    			spring-boot-starter-test
    			test
    		
    
            
                junit
                junit
                4.12
            
    
    		
    			com.alibaba
    			fastjson
    			1.2.6
    		
    		
    		
    			org.mybatis.spring.boot
    			mybatis-spring-boot-starter
    			1.3.2
    		
    		
    			mysql
    			mysql-connector-java
    			runtime
    		
     
  • 프로필 수정
    spring.data.elasticsearch.cluster-name=my-application
    spring.data.elasticsearch.cluster-nodes=h120,h121,h122
     
  • ok 설정이 완료되었습니다. 다음에es를 조작할 수 있습니다

  • repository

  • 실체 클래스를 만듭니다
    /**  indexname、 type、  、  */
    @Document(indexName = "goods", type = "goods", shards = 3, replicas = 2)
    public class Goods implements Serializable {
        private Integer id;
        @Field(type = FieldType.Text, index = true, store = false, analyzer = "ik_max_word", searchAnalyzer = "ik_max_word")
        private String name;
        private String productId;
        private String barcode;
        private Integer typeId;
    
    indexname, type, 분할, 피분수를 지정합니다. 기본 @Document의 필드는 모두 인덱스됩니다. 필드에서 @Field로 필드 형식, 인덱스 여부, 저장 여부, 인덱스 시 analyzer, 검색 시 analyzer를 지정합니다
  • 리포지토리 만들기
    @Repository
    public interface GoodsRepository extends ElasticsearchRepository{
    
        List findByNameContains(String key, Pageable pageable);
        List findByBarcodeContains(String key, Pageable pageable);
    }
     
  • 테스트 클래스에 마퍼와 리포지토리를 주입합니다
    	@Autowired
    	GoodsMapper goodsMapper;
    
    	@Autowired
    	GoodsRepository goodsRepository;
    mapper는 데이터베이스 데이터 조회,repository 쓰기에 사용됩니다..
  • 데이터를 불러옵니다
    	@Test
    	public void indexAllGoods(){
    		//  mapper , repository es
    		List goodsList = goodsMapper.selectAll();
    		goodsRepository.saveAll(goodsList);
    	}
     
  • 데이터를 조회하고repository에서 정의한 인터페이스를 사용합니다
    @Test
    	public void findGoodsByName(){
    		List goodsList;
    
    		goodsList = goodsRepository.findByBarcodeContains("69329392", PageRequest.of(0, 10));
    		print(goodsList);
    
    		goodsList = goodsRepository.findByNameContains(" ", PageRequest.of(0, 10));
    		print(goodsList);
    
    		goodsList = goodsRepository.findByNameContains(" ", PageRequest.of(0, 10));
    		print(goodsList);
    
    		goodsList = goodsRepository.findByNameContains(" ", PageRequest.of(0, 10));
    		print(goodsList);
    	}
    	private void print(List list){
    		System.out.println(JSONObject.toJSONString(list));
    	}
    테스트를 통해 이곳에서 조회한 후에 브레이크를 밟을 수 있습니다. 왜냐하면 브레이크라는 데이터가 있기 때문에 브레이크를 밟을 수 없습니다.es 중국어에 대한 모호한 조회는 신뢰할 수 없습니다. IK의 어구를 미리 최적화해야 합니다.중국어 필드는 Search를 사용하는 것이 좋습니다. 
  • 데이터 검색
    @Test
    	public void stringQueryBuilder(){
    //		QueryBuilder queryBuilder = new QueryStringQueryBuilder("name: ");
    //		QueryBuilder queryBuilder = new QueryStringQueryBuilder(" ").field("name");
    		QueryBuilder queryBuilder = new QueryStringQueryBuilder(" ").field("name").analyzer("ik_max_word");
    		Iterable goodsIterable = goodsRepository.search(queryBuilder);
    		Iterator iterator = goodsIterable.iterator();
    		while (iterator.hasNext()){
    			Goods goods = iterator.next();
    			System.out.println(JSONObject.toJSONString(goods));
    		}
    
    		System.out.println("-------------------------");
    		queryBuilder = new QueryStringQueryBuilder(" ").field("name");
    		goodsIterable = goodsRepository.search(queryBuilder);
    		iterator = goodsIterable.iterator();
    		while (iterator.hasNext()){
    			Goods goods = iterator.next();
    			System.out.println(JSONObject.toJSONString(goods));
    		}
    	}
    다양한 QueryBuilder 지원..

  • ElasticsearchTemplate 작업


    ElasticsearchTemplate를 직접 주입하여 작업을 수행할 수 있습니다.
     

     

    좋은 웹페이지 즐겨찾기