@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ESTest {
@Autowired
private ElasticsearchTemplate esTemplate;
@Test
public void createIndexStu() {
Stu stu = new Stu();
stu.setStuId(1005L);
stu.setName("iron man");
stu.setAge(54);
stu.setMoney(1999.8f);
stu.setSign("I am iron man");
stu.setDescription("I have a iron army");
IndexQuery indexQuery = new IndexQueryBuilder().withObject(stu).build();
esTemplate.index(indexQuery);
}
@Test
public void deleteIndexStu() {
esTemplate.deleteIndex(Stu.class);
}
@Test
public void updateStuDoc() {
Map<String, Object> sourceMap = new HashMap<>();
sourceMap.put("money", 99.8f);
IndexRequest indexRequest = new IndexRequest();
indexRequest.source(sourceMap);
UpdateQuery updateQuery = new UpdateQueryBuilder()
.withClass(Stu.class)
.withId("1004")
.withIndexRequest(indexRequest)
.build();
esTemplate.update(updateQuery);
}
@Test
public void getStuDoc() {
GetQuery query = new GetQuery();
query.setId("1002");
Stu stu = esTemplate.queryForObject(query, Stu.class);
System.out.println(stu);
}
@Test
public void deleteStuDoc() {
esTemplate.delete(Stu.class, "1002");
}
@Test
public void searchStuDoc() {
Pageable pageable = PageRequest.of(0, 2);
SearchQuery query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("description", "save man"))
.withPageable(pageable)
.build();
AggregatedPage<Stu> pagedStu = esTemplate.queryForPage(query, Stu.class);
System.out.println("检索后的总分页数目为:" + pagedStu.getTotalPages());
List<Stu> stuList = pagedStu.getContent();
for (Stu s : stuList) {
System.out.println(s);
}
}
@Test
public void highlightStuDoc() {
String preTag = "<font color='red'>";
String postTag = "</font>";
Pageable pageable = PageRequest.of(0, 10);
SortBuilder sortBuilder = new FieldSortBuilder("money")
.order(SortOrder.DESC);
SortBuilder sortBuilderAge = new FieldSortBuilder("age")
.order(SortOrder.ASC);
SearchQuery query = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.matchQuery("description", "save man"))
.withHighlightFields(new HighlightBuilder.Field("description")
.preTags(preTag)
.postTags(postTag))
.withSort(sortBuilder)
.withSort(sortBuilderAge)
.withPageable(pageable)
.build();
AggregatedPage<Stu> pagedStu = esTemplate.queryForPage(query, Stu.class, new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
List<Stu> stuListHighlight = new ArrayList<>();
SearchHits hits = response.getHits();
for (SearchHit h : hits) {
HighlightField highlightField = h.getHighlightFields().get("description");
String description = highlightField.getFragments()[0].toString();
Object stuId = (Object)h.getSourceAsMap().get("stuId");
String name = (String)h.getSourceAsMap().get("name");
Integer age = (Integer)h.getSourceAsMap().get("age");
String sign = (String)h.getSourceAsMap().get("sign");
Object money = (Object)h.getSourceAsMap().get("money");
Stu stuHL = new Stu();
stuHL.setDescription(description);
stuHL.setStuId(Long.valueOf(stuId.toString()));
stuHL.setName(name);
stuHL.setAge(age);
stuHL.setSign(sign);
stuHL.setMoney(Float.valueOf(money.toString()));
stuListHighlight.add(stuHL);
}
if (stuListHighlight.size() > 0) {
return new AggregatedPageImpl<>((List<T>)stuListHighlight);
}
return null;
}
});
System.out.println("检索后的总分页数目为:" + pagedStu.getTotalPages());
List<Stu> stuList = pagedStu.getContent();
for (Stu s : stuList) {
System.out.println(s);
}
}
}