SpringBoot 응용 프로그램의 분산 인덱스

SpringBoot 어플리케이션 제품군
  • SpringBoot 응용 프로그램의 구성 센터
  • SpringBoot 응용 프로그램의 분산 세션
  • SpringBoot 응용 프로그램의 분포식 인덱스
  • SpringBoot 응용 프로그램의 분산 캐시
  • SpringBoot 응용 프로그램의 메시지 대기열
  • SpringBoot 어플리케이션의 ELK

  • 순서


    본고는 주로 SpringBoot에서elasticsearch를 어떻게 사용하는지 설명한다.Elasticsearch는 그 근원으로 볼 때 색인 서비스이지만 고급스러운 점은 분포식 실시간 파일 저장, 분포식 실시간 분석 검색엔진이다.

    준비


    자세한 것은docker 환경 구축elasticsearch를 보십시오.

    새 항목


    application.properties

    spring.data.elasticsearch.repositories.enabled=true
    spring.data.elasticsearch.cluster-name=cn-out-of-box
    spring.data.elasticsearch.cluster-nodes=192.168.99.100:9300

    모델

    @Document(indexName = "post", type = "post", shards = 1, replicas = 0)
    public class Post {
        @Id
        private String id;
    
        private String title;
    
        private Double rating;
    
        @Field(type= FieldType.Nested)
        private List tags;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public List getTags() {
            return tags;
        }
    
        public void setTags(List tags) {
            this.tags = tags;
        }
    
        public Double getRating() {
            return rating;
        }
    
        public void setRating(Double rating) {
            this.rating = rating;
        }
    }

    내장 객체
    public class Tag {
        private String id;
        private String name;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    repository

    public interface PostRepository extends ElasticsearchRepository {
    
        Page findByTagsName(String name, Pageable pageable);
    
        List findByRatingBetween(Double beginning, Double end);
    
    }

    서비스 계층

    @Service
    public class PostService {
    
        @Autowired
        PostRepository postRepository;
    
        public Post save(Post post){
            postRepository.save(post);
            return post;
        }
    
        public Post findOne(String id) {
            return postRepository.findOne(id);
        }
    
        public Iterable findAll() {
            return postRepository.findAll();
        }
    
        public Page findByTagsName(String tagName, PageRequest pageRequest) {
            return postRepository.findByTagsName(tagName, pageRequest);
        }
    
        List findByRatingBetween(Double beginning, Double end){
            return postRepository.findByRatingBetween(beginning,end);
        }
    }

    Test

    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringApplicationConfiguration(classes = EsdemoApplication.class)
    public class EsdemoApplicationTests {
    
        @Autowired
        private PostService postService;
    
        @Autowired
        private ElasticsearchTemplate elasticsearchTemplate;
    
        @Before
        public void before() {
            elasticsearchTemplate.deleteIndex(Post.class);
            elasticsearchTemplate.createIndex(Post.class);
            elasticsearchTemplate.putMapping(Post.class);
            elasticsearchTemplate.refresh(Post.class, true);
        }
    
        @Test
        public void testSave() throws Exception {
            Tag tag = new Tag();
            tag.setId("1");
            tag.setName("tech");
            Tag tag2 = new Tag();
            tag2.setId("2");
            tag2.setName("elasticsearch");
    
            Post post = new Post();
            post.setId("1");
            post.setTitle("Bigining with spring boot application and elasticsearch");
            post.setRating(9.5);
            post.setTags(Arrays.asList(tag, tag2));
            postService.save(post);
    
            assertThat(post.getId(), notNullValue());
    
            Post post2 = new Post();
            post2.setId("2");
            post2.setTitle("Bigining with spring boot application");
            post2.setTags(Arrays.asList(tag));
            post2.setRating(7.5);
            postService.save(post2);
            assertThat(post2.getId(), notNullValue());
        }
    
        @Test //tag nested 
        public void testFindByTagsName() throws Exception {
            Tag tag = new Tag();
            tag.setId("1");
            tag.setName("tech");
            Tag tag2 = new Tag();
            tag2.setId("2");
            tag2.setName("elasticsearch");
    
            Post post = new Post();
            post.setId("1");
            post.setTitle("Bigining with spring boot application and elasticsearch");
            post.setRating(9.4);
            post.setTags(Arrays.asList(tag, tag2));
            postService.save(post);
    
    
    
            Post post2 = new Post();
            post2.setId("1");
            post2.setTitle("Bigining with spring boot application");
            post2.setTags(Arrays.asList(tag));
            post2.setRating(9.6);
            postService.save(post2);
    
            Page posts  = postService.findByTagsName("tech", new PageRequest(0,10));
            Page posts2  = postService.findByTagsName("tech", new PageRequest(0,10));
            Page posts3  = postService.findByTagsName("maz", new PageRequest(0,10));
    
    
            assertThat(posts.getTotalElements(), is(1L));
            assertThat(posts2.getTotalElements(), is(1L));
            assertThat(posts3.getTotalElements(), is(0L));
        }
    
    }

    save 캡처

    구덩이

  • NoNodeAvailableException
  • org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []

    응용 프로그램에 지정된cluster-name과 집단의cluster.name이 일치하지 않아서요.

    참고

  • First Step with Spring Boot and Elasticsearch
  • Head first elastic search on java with spring boot and data features
  • 좋은 웹페이지 즐겨찾기