需要依賴
<!-- 搜索引擎工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>5.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.5.1</version>
</dependency>
2.從mysql向索引導入數據
@Test
public void insertData() throws IOException {
// 查詢mysql數據
List<PmsSkuInfo> pmsSkuInfoList = new ArrayList<>();
pmsSkuInfoList = skuService.getAllSku();
// 轉化爲es的數據結構
List<PmsSearchSkuInfo> pmsSearchSkuInfos = new ArrayList<>();
for (PmsSkuInfo pmsSkuInfo : pmsSkuInfoList) {
PmsSearchSkuInfo pmsSearchSkuInfo = new PmsSearchSkuInfo();
//複製屬性
BeanUtils.copyProperties(pmsSkuInfo, pmsSearchSkuInfo);
pmsSearchSkuInfo.setId(Long.parseLong(pmsSkuInfo.getId()));
pmsSearchSkuInfos.add(pmsSearchSkuInfo);
}
// 導入es
for (PmsSearchSkuInfo pmsSearchSkuInfo : pmsSearchSkuInfos) {
//插入
Index put = new Index.Builder(pmsSearchSkuInfo).index("bookindex").type("PmsSkuInfo").id(pmsSearchSkuInfo
.getId() + "").build();
jestClient.execute(put);
}
}
3.構建搜索對象
其中bool 下面有 filter(包含rangequery ,termquery) must(包含multiMatchQueryBuilder,termQueryBuilder,matchQuery)
與bool同級的有分頁,高亮,排序
@SpringBootTest
@RunWith(SpringRunner.class)
public class BookSearchServiceApplicationTests {
@Autowired
JestClient jestClient;
@Test
public void contextLoads() throws IOException {
//構建搜索對象
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//bool
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
//filter
TermQueryBuilder termQueryBuilder = new TermQueryBuilder("skuName","小米");
boolQueryBuilder.filter(termQueryBuilder);
//must
MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("skuDesc","移動聯通電信4G手機");
boolQueryBuilder.must(matchQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
//分頁
searchSourceBuilder.from(0);
searchSourceBuilder.size(20);
//高亮
searchSourceBuilder.highlight(null);
String dslStr = searchSourceBuilder.toString();
List<PmsSearchSkuInfo> pmsSearchSkuInfoList = new ArrayList<>();
Search search = new Search.Builder(dslStr).addIndex("bookindex").addType("PmsSkuInfo").build();
SearchResult result = jestClient.execute(search);
List<SearchResult.Hit<PmsSearchSkuInfo, Void>> hits = result.getHits(PmsSearchSkuInfo.class);
for (SearchResult.Hit<PmsSearchSkuInfo, Void> hit : hits) {
PmsSearchSkuInfo source = hit.source;
pmsSearchSkuInfoList.add(source);
}
System.out.println(pmsSearchSkuInfoList);
}