1. 在idea中新建项目,选择spring模板。
2. 选择elasticsearch依赖。
3. 项目的pom文件是这样的。
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0</ modelVersion>
< parent>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-parent</ artifactId>
< version> 2.6.1</ version>
< relativePath/>
</ parent>
< groupId> com.mujl</ groupId>
< artifactId> springelasticsearch</ artifactId>
< version> 0.0.1-SNAPSHOT</ version>
< name> springelasticsearch</ name>
< description> Demo project for Spring Boot</ description>
< properties>
< java.version> 1.8</ java.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-data-elasticsearch</ artifactId>
</ dependency>
< dependency>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-starter-test</ artifactId>
< scope> test</ scope>
</ dependency>
</ dependencies>
< build>
< plugins>
< plugin>
< groupId> org.springframework.boot</ groupId>
< artifactId> spring-boot-maven-plugin</ artifactId>
</ plugin>
</ plugins>
</ build>
</ project>
4. application.properties文件的内容
spring.elasticsearch.uris= http://101.43.8.200:9200,http://47.104.165.141:9200,http://82.156.163.91:9200
5. javaBean类
package com. mujl. springelasticsearch. bean ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import lombok. ToString ;
import org. springframework. data. annotation. Id ;
import org. springframework. data. elasticsearch. annotations. Document ;
import org. springframework. data. elasticsearch. annotations. Field ;
import org. springframework. data. elasticsearch. annotations. FieldType ;
import java. io. Serializable ;
import java. math. BigDecimal ;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Document ( indexName = "shop" , shards= 5 , replicas = 1 , createIndex = false )
public class Goods implements Serializable {
@Id
private Integer goodsId;
@Field ( type = FieldType. Text , analyzer = "ik_max_word" )
private String goodsName;
@Field ( type = FieldType. Double )
private BigDecimal marketPrice;
@Field ( type= FieldType. Keyword )
private String originalImg;
private static final long serialVersionUID = 1L ;
}
javaBean内容解释
6. GoodsRepository类
package com. mujl. springelasticsearch. dao ;
import com. mujl. springelasticsearch. bean. Goods ;
import org. springframework. data. elasticsearch. annotations. Query ;
import org. springframework. data. elasticsearch. repository. ElasticsearchRepository ;
import java. util. List ;
public interface GoodsRepository extends ElasticsearchRepository < Goods , Integer > {
List < Goods > findByGoodsName ( String goodsName) ;
@Query ( "{\"match\":{\"goodsId\":{\"query\":\"?0\"}}}" )
Goods findByIdValue ( Integer id) ;
}
GoodsRepository类内容解释
7. 测试方法(//注释的方法也是可用的,只是为了测试效果注释掉了一些其他效果)
package com. mujl. springelasticsearch ;
import com. mujl. springelasticsearch. bean. Goods ;
import com. mujl. springelasticsearch. dao. GoodsRepository ;
import lombok. val ;
import org. elasticsearch. index. query. QueryBuilder ;
import org. elasticsearch. index. query. QueryBuilders ;
import org. elasticsearch. search. fetch. subphase. highlight. HighlightBuilder ;
import org. elasticsearch. search. sort. SortBuilders ;
import org. elasticsearch. search. sort. SortOrder ;
import org. junit. jupiter. api. Test ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. boot. test. context. SpringBootTest ;
import org. springframework. data. domain. PageRequest ;
import org. springframework. data. domain. Sort ;
import org. springframework. data. elasticsearch. core. ElasticsearchRestTemplate ;
import org. springframework. data. elasticsearch. core. IndexOperations ;
import org. springframework. data. elasticsearch. core. SearchHit ;
import org. springframework. data. elasticsearch. core. SearchHits ;
import org. springframework. data. elasticsearch. core. document. Document ;
import org. springframework. data. elasticsearch. core. mapping. IndexCoordinates ;
import org. springframework. data. elasticsearch. core. query. NativeSearchQuery ;
import org. springframework. data. elasticsearch. core. query. NativeSearchQueryBuilder ;
import java. math. BigDecimal ;
import java. util. ArrayList ;
import java. util. List ;
import java. util. Map ;
@SpringBootTest
class SpringelasticsearchApplicationTests {
@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Autowired
private GoodsRepository goodsRepository;
@Test
void contextLoads ( ) {
}
@Test
public void testIndex ( ) {
IndexOperations indexOperations = elasticsearchRestTemplate. indexOps ( Goods . class ) ;
indexOperations. delete ( ) ;
}
@Test
public void testRepository ( ) {
Goods goods = goodsRepository. findByIdValue ( 150 ) ;
System . out. println ( goods) ;
}
@Test
public void testCUD ( ) {
List < Goods > list = new ArrayList < > ( ) ;
list. add ( new Goods ( 158 , "测试手机9" , new BigDecimal ( "200" ) , "png" ) ) ;
list. add ( new Goods ( 159 , "测试手机10" , new BigDecimal ( "200" ) , "png" ) ) ;
elasticsearchRestTemplate. save ( list) ;
}
@Test
public void testSearch ( ) {
NativeSearchQuery query = new NativeSearchQueryBuilder ( ) . withQuery ( QueryBuilders . matchQuery ( "goodsName" , "测试" ) ) . build ( ) ;
SearchHits < Goods > search = elasticsearchRestTemplate. search ( query, Goods . class ) ;
search. getSearchHits ( ) . forEach ( System . out:: println ) ;
}
@Test
public void testSearchHigh ( ) {
NativeSearchQuery query = new NativeSearchQueryBuilder ( )
. withQuery ( QueryBuilders . multiMatchQuery ( "测试" , "goodsName" ) )
. withPageable ( PageRequest . of ( 0 , 5 , Sort. Direction . DESC, "goodsId" , "marketPrice" ) )
. withHighlightBuilder ( new HighlightBuilder ( ) . field ( "goodsName" ) . preTags ( "<span style='color:red'>" ) . postTags ( "</span>" ) )
. build ( ) ;
SearchHits < Goods > searchHits = elasticsearchRestTemplate. search ( query, Goods . class ) ;
for ( SearchHit < Goods > searchHit: searchHits) {
float score = searchHit. getScore ( ) ;
String id = searchHit. getId ( ) ;
List < Object > list = searchHit. getSortValues ( ) ;
list. forEach ( System . out:: println ) ;
String goodsName = searchHit. getHighlightField ( "goodsName" ) . get ( 0 ) ;
Goods goods = searchHit. getContent ( ) ;
System . out. println ( "score:" + score) ;
System . out. println ( "id:" + id) ;
System . out. println ( "goods:" + goods) ;
System . out. println ( "goodsName高亮:" + goodsName) ;
System . out. println ( "==============================" ) ;
}
}
}
SpringelasticsearchApplicationTests类的相关解释