麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Elasticsearch實現復合查詢高亮結果功能

2019-11-19 10:50:29
字體:
來源:轉載
供稿:網友

一.Es的配置

實現es的全文檢索功能的第一步,首先從與es進行連接開始,這里我使用的是es的5.x java api語法.

public TransportClient esClient() throws UnknownHostException{    Settings settings = Settings.builder()        .put("cluster.name", "my-application") //節點的名字        .put("client.transport.sniff", true)        .build();        InetSocketTransportAddress iAddress = new InetSocketTransportAddress( //連接es的ip地址和端口號        InetAddress.getByName("127.0.0.1"),9300        );        //根據先前的配置生成client,后面的操作基本都是基于這個    TransportClient client = new PreBuiltTransportClient(settings)        .addTransportAddress(iAddress);    return client;  }

二.功能的實現

以下是全文檢索的核心代碼,包括我遇到的錯誤以及解決,包括如何對高亮失效,高亮不全等的解決.

1.查詢條件

 TransportClient esClient = esClient();  //獲取先前生成的client    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); //生成復合查詢構造器        boolQuery.mustNot(        QueryBuilders.matchQuery("",) //字段必須不包含啥         );        boolQuery.should(        QueryBuilders.matchQuery(, )  //字段可以包含啥,相當于或者        );    boolQuery.must(        QueryBuilders.matchQuery(,) //字段必須包含啥        );

2.高亮條件

//配置標題高亮顯示    HighlightBuilder highlightBuilder = new HighlightBuilder(); //生成高亮查詢器    highlightBuilder.field(title);   //高亮查詢字段    highlightBuilder.field(content);  //高亮查詢字段    highlightBuilder.requireFieldMatch(false);   //如果要多個字段高亮,這項要為false    highlightBuilder.preTags("<span style=/"color:red/">");  //高亮設置    highlightBuilder.postTags("</span>");    //下面這兩項,如果你要高亮如文字內容等有很多字的字段,必須配置,不然會導致高亮不全,文章內容缺失等    highlightBuilder.fragmentSize(800000); //最大高亮分片數    highlightBuilder.numOfFragments(0); //從第一個分片獲取高亮片段

3.查詢配置

// 根據字段進行排序,這里我根據時間進行倒排FieldSortBuilder timeSort = SortBuilders.fieldSort("time").order(SortOrder.DESC);          //查詢請求生成    SearchRequestBuilder requestBuilder = esClient.prepareSearch(indexname)//索引名字            .setTypes(indextype)   //索引類型            .setQuery(boolQuery)   //配置查詢條件            .addSort(new ScoreSortBuilder())  //根據查詢相關度進行排序            .addSort(timeSort)         //再根據時間進行排序            .setTrackScores(true)       //避免分頁之后相關性亂了            .highlighter(highlightBuilder)   //配置高亮            .setFrom(from)         //設置分頁            .setSize();

4.獲取查詢結果對其高亮

   

 //獲取查詢結果    SearchResponse searchResponse = requestBuilder.get();    List<Map<String, Object>> course = new ArrayList<>();     if(searchResponse.status() != RestStatus.OK){      return course;    }    for(SearchHit hit:searchResponse.getHits()){      //獲取高亮字段      Map<String, HighlightField> highlightFields = hit.getHighlightFields();      HighlightField titleField = highlightFields.get("");      HighlightField contentField = highlightFields.get("");      Map<String, Object> source = hit.getSource();      //千萬記得要記得判斷是不是為空,不然你匹配的第一個結果沒有高亮內容,那么就會報空指針異常,這個錯誤一開始真的搞了很久      if(titleField!=null){        Text[] fragments = titleField.fragments();         String name = "";        for (Text text : fragments) {        name+=text;        }        source.put("", name);  //高亮字段替換掉原本的內容        }      course.add(source);    }    esClient.close();   //用完記得關閉    return course;

三.結語

這樣前端所獲取結果的搜索內容將會被<span style="color:red;"></span>所包含,比如我前端是微信小程序,所以直接獲取內容進行渲染的話,就是一堆字符串,所以用的是小程序的富文本標簽<rich-text>.

總結

以上所述是小編給大家介紹的Elasticsearch實現復合查詢高亮結果功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人在线视频黄色 | 成人在线视频播放 | 91福利社在线 | 午夜男人免费视频 | 欧美日韩在线视频一区 | 黑人日比视频 | 黑人一级片 | 欧美亚洲国产成人 | 欧美日韩夜夜 | 欧美成人高清视频 | 激情久久一区二区 | v11av在线播放 | 羞羞电影在线观看www | 国产亚色 | 黄色片视频免费观看 | 亚洲成人欧美在线 | 黄色一级片免费在线观看 | 欧美女同hd | 香蕉黄色网 | 一区二区三区视频在线播放 | 久久久久久久久久久国产精品 | 青青草成人免费视频在线 | 欧美大逼网 | 日韩精品中文字幕在线播放 | 久久精品一区二区三区不卡牛牛 | 在线免费观看毛片视频 | 欧美一级视频网站 | 黄色99视频 | 羞羞的视频免费在线观看 | 精品久久久久久综合日本 | 欧美3p激情一区二区三区猛视频 | 成人男女啪啪免费观看网站四虎 | 日韩.www | 国产精品久久久久久模特 | 日本欧美一区二区三区在线播 | 免费香蕉成视频成人网 | 青草久久av | 欧美视频一二区 | av电影在线观看免费 | 男女无套免费视频 | 激情影院在线观看 |