elasticsearch 高亮搜索字段
elasticsearch 高亮搜索字段
#
********************
相关类与接口
HighlightBuilder:高亮构造器
public class HighlightBuilder extends AbstractHighlighterBuilder<HighlightBuilder> {
*********
构造方法
public HighlightBuilder() {
public HighlightBuilder(HighlightBuilder template, QueryBuilder highlightQuery, List<HighlightBuilder.Field> fields) {
public HighlightBuilder(StreamInput in) throws IOException {
*********
常用方法
public HighlightBuilder field(String name) {
public HighlightBuilder field(String name, int fragmentSize) {
public HighlightBuilder field(String name, int fragmentSize, int numberOfFragments) {
public HighlightBuilder field(String name, int fragmentSize, int numberOfFragments, int fragmentOffset) {
public HighlightBuilder field(HighlightBuilder.Field field) {
void fields(List<HighlightBuilder.Field> fields) {
public List<HighlightBuilder.Field> fields() {
AbstractHighlighterBuilder
public abstract class AbstractHighlighterBuilder<HB extends AbstractHighlighterBuilder<?>> implements Writeable, Rewriteable<HB>, ToXContentObject {
*********
常用方法
public HB preTags(String... preTags) { //设置前缀
public String[] preTags() {
public HB postTags(String... postTags) { //设置后缀
public String[] postTags() {
ElasticsearchRestTemplate:操作类
public class ElasticsearchRestTemplate extends AbstractElasticsearchTemplate implements ElasticsearchOperations, EsClient<RestHighLevelClient>, ApplicationContextAware {
public <T> AggregatedPage<T> queryForPage(SearchQuery query, Class<T> clazz, SearchResultMapper mapper) {
SearchResultMapper:搜索结果映射类
public interface SearchResultMapper {
<T> AggregatedPage<T> mapResults(SearchResponse var1, Class<T> var2, Pageable var3);
@Nullable
<T> T mapSearchHit(SearchHit var1, Class<T> var2);
}
SearchResponse
public class SearchResponse extends ActionResponse implements StatusToXContentObject {
public SearchHits getHits() {
SearchHit
public final class SearchHit implements Streamable, ToXContentObject, Iterable<DocumentField> {
public Map<String, HighlightField> getHighlightFields() {
HightField
public class HighlightField implements ToXContentFragment, Streamable {
public Text[] fragments() {
public Text[] getFragments() {
Text
public final class Text implements Comparable<Text>, ToXContentFragment {
public String string() {
public String toString() {
#
********************
示例
****************
conroller 层
@RestController
public class PersonController {
@Resource
private PersonRepository personRepository;
@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;
@RequestMapping("/save")
public String save(){
for (int i=0;i<100;i++){
Person person=new Person();
person.setId(i);
person.setName("瓜田李下 "+i);
person.setAge(i/10+10);
personRepository.save(person);
}
return "success";
}
@RequestMapping("/highlight")
@SuppressWarnings("unchecked")
public List<Person> highlight(){
QueryBuilder queryBuilder=QueryBuilders.regexpQuery("name","瓜田李下 1.");
HighlightBuilder highlightBuilder=new HighlightBuilder().field("name")
.preTags("<span style='color:red'>").postTags("</span>")
.requireFieldMatch(false);
NativeSearchQuery nativeSearchQuery=new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withHighlightBuilder(highlightBuilder).build();
AggregatedPage<Person> aggregatedPage=elasticsearchRestTemplate.queryForPage(nativeSearchQuery,
Person.class, new SearchResultMapper() {
@Override
public <T> AggregatedPage<T> mapResults(SearchResponse searchResponse, Class<T> aClass, Pageable pageable) {
List<Person> list=new ArrayList<>();
SearchHits searchHits=searchResponse.getHits();
if (searchHits.getHits().length!=0){
for (SearchHit searchHit:searchHits){
Person person=new Person();
Map<String,Object> map=searchHit.getSourceAsMap();
person.setId(Integer.parseInt(map.get("id").toString()));
person.setAge(Integer.parseInt(map.get("age").toString()));
HighlightField nameField=searchHit.getHighlightFields().get("name");
if (nameField!=null){
person.setName(nameField.getFragments()[0].toString());
}else {
person.setName(map.get("name").toString());
}
list.add(person);
}
}
if (list.size()!=0){
return new AggregatedPageImpl<>((List<T>)list);
}
return null;
}
@Override
public <T> T mapSearchHit(SearchHit searchHit, Class<T> aClass) {
return null;
}
});
List<Person> list=aggregatedPage.getContent();
list.forEach(System.out::println);
return list;
}
}
#
********************
使用测试
/highlight
Person(id=11, name=<span style='color:red'>瓜田李下 11</span>, age=11)
Person(id=13, name=<span style='color:red'>瓜田李下 13</span>, age=11)
Person(id=16, name=<span style='color:red'>瓜田李下 16</span>, age=11)
Person(id=17, name=<span style='color:red'>瓜田李下 17</span>, age=11)
Person(id=19, name=<span style='color:red'>瓜田李下 19</span>, age=11)
Person(id=10, name=<span style='color:red'>瓜田李下 10</span>, age=11)
Person(id=14, name=<span style='color:red'>瓜田李下 14</span>, age=11)
Person(id=12, name=<span style='color:red'>瓜田李下 12</span>, age=11)
Person(id=15, name=<span style='color:red'>瓜田李下 15</span>, age=11)
Person(id=18, name=<span style='color:red'>瓜田李下 18</span>, age=11)
还没有评论,来说两句吧...