亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Elasticsearch實現(xiàn)復(fù)合查詢高亮結(jié)果功能

 更新時間:2019年09月10日 11:51:43   作者:海中燈塔  
這篇文章主要介紹了Elasticsearch實現(xiàn)復(fù)合查詢,高亮結(jié)果功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

一.Es的配置

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

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

二.功能的實現(xiàn)

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

1.查詢條件

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

    boolQuery.must(
        QueryBuilders.matchQuery(,) //字段必須包含啥
        );

2.高亮條件

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

3.查詢配置

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

4.獲取查詢結(jié)果對其高亮

   

 //獲取查詢結(jié)果
    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();
      //千萬記得要記得判斷是不是為空,不然你匹配的第一個結(jié)果沒有高亮內(nèi)容,那么就會報空指針異常,這個錯誤一開始真的搞了很久
      if(titleField!=null){
        Text[] fragments = titleField.fragments(); 
        String name = "";
        for (Text text : fragments) {
        name+=text;
        }
        source.put("", name);  //高亮字段替換掉原本的內(nèi)容
        }
      course.add(source);
    }
    esClient.close();   //用完記得關(guān)閉
    return course;

三.結(jié)語

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

總結(jié)

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

相關(guān)文章

  • Js類的構(gòu)建與繼承案例詳解

    Js類的構(gòu)建與繼承案例詳解

    這篇文章主要介紹了Js類的構(gòu)建與繼承案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • json格式的時間顯示為正常年月日的方法

    json格式的時間顯示為正常年月日的方法

    json格式的時間顯示為:Date(1377828670436)需要轉(zhuǎn)換為正常年月日,具體的實現(xiàn)思路及代碼如下,感興趣的朋友可以參考下
    2013-09-09
  • 腳本收藏iframe

    腳本收藏iframe

    腳本收藏iframe...
    2006-07-07
  • JS實現(xiàn)仿中關(guān)村論壇評分后彈出提示效果的方法

    JS實現(xiàn)仿中關(guān)村論壇評分后彈出提示效果的方法

    這篇文章主要介紹了JS實現(xiàn)仿中關(guān)村論壇評分后彈出提示效果的方法,實例分析了javascript彈出特效的css與提示框的具體實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • JavaScript實現(xiàn)隨機點名器

    JavaScript實現(xiàn)隨機點名器

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)隨機點名器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • js對象轉(zhuǎn)json數(shù)組的簡單實現(xiàn)案例

    js對象轉(zhuǎn)json數(shù)組的簡單實現(xiàn)案例

    本篇文章主要是對js對象轉(zhuǎn)json數(shù)組的簡單實現(xiàn)案例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • JavaScript常見繼承模式實例小結(jié)

    JavaScript常見繼承模式實例小結(jié)

    這篇文章主要介紹了JavaScript常見繼承模式,結(jié)合實例形式總結(jié)分析了javascript原型鏈繼承、構(gòu)造函數(shù)繼承、組合繼承、原型式繼承、寄生式繼承等相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2019-01-01
  • js 連續(xù)賦值的簡單實現(xiàn)

    js 連續(xù)賦值的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄猨s 連續(xù)賦值的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • 原生javascript模仿win8等待提示圓圈進(jìn)度條

    原生javascript模仿win8等待提示圓圈進(jìn)度條

    一直很中意win8等待提示圓圈進(jìn)度條,下面本文就使用原生javascript模仿win8等待進(jìn)度條,需要的朋友可以參考下
    2014-04-04
  • Javascript中的 “&” 和 “|” 詳解

    Javascript中的 “&” 和 “|” 詳解

    本文主要介紹了Javascript中的 “&” 和 “|” 的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論