es(elasticsearch)통합 SpringCloud(SpringBoot)구축 튜 토리 얼 상세 설명

메모:springboot 또는 springcloud 프레임 워 크 에 적용
1.우선 관련 파일 다운로드
2.그리고 시작 파일 을 시작 해 야 합 니 다.
请添加图片描述
请添加图片描述
3.관련 jar 패키지 가 져 오기(관련 의존 패키지 가 가 져 올 필요 가 없다 면)및 설정 파일 을 가 져 오고 dao 인터페이스 계승 클래스 를 작성 하여 시작 클래스 에 주 소 를 표시 합 니 다.

<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
</dependency>

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

## ElasticSearch - start
#   Elasticsearch   (   :true)
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.cluster-nodes=localhost:9300
spring.data.elasticsearch.cluster-name=myes
Shop:아래 에 생 성 된 실체 클래스 이름(잘못 쓸 수 없습니다)입 니 다.String(참조 할 때의 유형 입 니 다.제 가 여기 있 는 id 도 String 입 니 다.integer 가 잘못 보 고 했 기 때 문 입 니 다)

import com.jk.user.model.Shop;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface EsDao extends ElasticsearchRepository<Shop,String> {
}
시작 클래스 에 주 해 를 붙 이 고 뒤에 따 르 는 것 은 dao 의 가방 이름 입 니 다.

@EnableElasticsearchRepositories(basePackages = "com.jk.web.dao")
4.실체 류
indexName 은 데이터베이스 이름,type 은 표 이름 에 해당 하 며 id,type 형식,analyzer 분사 기 이름(ik 분사)을 추가 해 야 합 니 다.

@Document(indexName = "zth",type = "t_shangpin")
public class Shop implements Serializable {
 private static final long serialVersionUID = 2006762641515872124L;

 private String id;

 @Field(type = FieldType.Text, analyzer = "ik_max_word")
 //    
 private String shopname;

 //    
 private Long reducedprice;
}
5.그 다음 에 controller 층(여기 dao 인터페이스 에 직접 주입)을 작성 합 니 다.여기 서 제 가 선택 한 것 은 대상 순환 할당 입 니 다.사실은 직접 집합 할 수 있 습 니 다(참고)

//elasticsearch    
 // @RequestMapping("el")
 // @ResponseBody
 // public void el(){

 // List<ElasticsearchBean> list=shoppService.queryelasticsearch();
 // for (ElasticsearchBean ss: list) {
 //  ss.setScrenicName(ss.getScrenicName()+""+ss.getHotelName());
 // }
 // elasticsearch.saveAll(list);

 // }

@Autowired
private EsDao esDao;
//      
@Autowired
private ElasticsearchTemplate elasticsearchTemplate ;

//  es     
@RequestMapping("addEs")
public boolean addShopEs() {
 List<TShangpin> list = webUserService.queryShouye();//           
 Shop shop = new Shop();
 try {
 for (int i = 0; i < list.size(); i++) {
  shop.setId(list.get(i).getShopid().toString());
  shop.setShopname(list.get(i).getShopname());
  esDao.save(shop);
 }
 return true;
 } catch (Exception e) {
 e.printStackTrace();
 return false;
 }
}
//es    
@RequestMapping("queryShop")
public List ellist(String name, HttpSession session, Integer page, Integer rows){
 if (name==null||"".equals(name)){
 name = session.getAttribute("name").toString();
 }
 page=1;
 rows=3;
 HashMap<String, Object> resultMap = new HashMap<>();
 //           
 SearchRequestBuilder searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch("zth").setTypes("t_shangpin");


 //      
 BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

 if (name!=null && !"".equals(name)){
 boolQueryBuilder.should(QueryBuilders.matchQuery("shopname",name));
 }
 //       
 searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 searchRequestBuilder.setQuery(boolQueryBuilder);

 //  
 searchRequestBuilder.setFrom((page-1)*rows);
 searchRequestBuilder.setSize(rows);
 //      
 HighlightBuilder highlightBuilder = new HighlightBuilder();
 highlightBuilder.field("shopname")
  .preTags("<font color='red'>")
  .postTags("</font>");
 searchRequestBuilder.highlighter(highlightBuilder);

 //           (json)
 SearchResponse searchResponse = searchRequestBuilder.get();
 SearchHits hits = searchResponse.getHits();
 //     
 long totalHits = hits.getTotalHits();
 resultMap.put("total",totalHits);

 ArrayList<Map<String,Object>> list = new ArrayList<>();
 //  Hits json    
 SearchHit[] hits1 = hits.getHits();
 for (int i=0;i<hits1.length;i++){
 //  Map  
 Map<String, Object> sourceAsMap = hits1[i].getSourceAsMap();
 //      
 Map<String, HighlightField> highlightFields = hits1[i].getHighlightFields();
 //!!              sourceAsMap           !!
 if (name!=null && !"".equals(name)){
  sourceAsMap.put("shopname",highlightFields.get("shopname").getFragments()[0].toString());
 }
 list.add(sourceAsMap);
 }

 return list;

}
6.마지막 으로 검색 할 수 없다 면 ik 의 json 파일 을 추가 해 야 할 수도 있 습 니 다.실체 류 에 ik 분사 기 라 고 규정 되 어 있 기 때문에 저장 하지 않 으 면 단어 가 없습니다.
film-mapping.json

{ 
"film": 
{ 
"_all":
{
"enabled": true 
},
"properties":
{ "id": 
{ 
"type": "integer"
},"name":
{
"type": "text", "analyzer": "ikSearchAnalyzer", "search_analyzer": "ikSearchAnalyzer", "fields":
{ "pinyin": { 
"type": "text", "analyzer": "pinyinSimpleIndexAnalyzer", "search_analyzer": "pinyinSimpleIndexAnalyzer" 
} } },
"nameOri": { "type": "text" 
},"publishDate": 
{ "type": "text" },"type": 
{ "type": "text"
},"language": 
{ "type": "text" 
},"fileDuration":
{ "type": "text" 
},"director":
{ "type": "text",
 "index": "true", "analyzer": "ikSearchAnalyzer"
 },"created": 
 {
 "type": "date", "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
 } } } }
film-setting.json
在这里插入图片描述

{ "index": { "analysis": 
{ "filter":
{ "edge_ngram_filter": 
{ "type": "edge_ngram", "min_gram": 1, "max_gram": 50 
},"pinyin_simple_filter": 
{
 "type": "pinyin", "first_letter": "prefix", "padding_char": " ", "limit_first_letter_length": 50, "lowercase": true
 } 
},"char_filter": 
 { 
"tsconvert": { "type": "stconvert", "convert_type": "t2s" 
 } 
},"analyzer":
 { "ikSearchAnalyzer": 
 { "type": "custom", "tokenizer": "ik_max_word", "char_filter": [ "tsconvert" ]
 },"pinyinSimpleIndexAnalyzer": 
 { "tokenizer": "keyword", "filter": [ "pinyin_simple_filter", "edge_ngram_filter", "lowercase" ] 
 } } } } }
在这里插入图片描述
총결산
이 글 은 es(elasticsearch)통합 SpringCloud(SpringBoot)구축 튜 토리 얼 에 대한 상세 한 설명 을 소개 합 니 다.더 많은 elasticsearch 통합 SpringCloud 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많이 응원 해 주세요!

좋은 웹페이지 즐겨찾기