国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch之排序解析(十二)

這篇具有很好參考價值的文章主要介紹了Elasticsearch之排序解析(十二)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

????????在默認(rèn)情況下,ES對搜索結(jié)果是按照相關(guān)性降序排序的。有時需要按照某些字段的值進(jìn)行升序或者降序排序。

????????ES提供了sort子句可以對數(shù)據(jù)進(jìn)行排序。使用sort子句一般是按照字段信息進(jìn)行排序,不受相關(guān)性影響,而且打分步驟需要耗費(fèi)一定的硬件資源和時間,因此默認(rèn)情況下,不對文檔進(jìn)行打分。使用sort排序分為兩種類別,一種是按照字段值的大小進(jìn)行排序,另一種是按照給定地理坐標(biāo)的距離遠(yuǎn)近進(jìn)行排序。

按普通字段值排序

????????使用sort子句對字段值進(jìn)行排序時需要指定排序的字段。ES默認(rèn)是按照字段值進(jìn)行升序排序,可以設(shè)置order參數(shù)為asc或desc,指定按照字段值進(jìn)行升序或者降序排序。以下示例為搜索名稱包含“北京”的旅館,并對旅館按照價格進(jìn)行降序排列:

GET /hotel/_search
{
  "query": {
    "match": {
      "title": "北京"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

????????使用sort對搜索結(jié)果排序后,在每個文檔的_source信息下面多出了一個sort信息,該信息中顯示了當(dāng)前文檔排序字段的值。另外,文檔的_score值和max_score都為null,這說明在默認(rèn)情況下ES查詢時使用sort對結(jié)果排序是不計算分?jǐn)?shù)的。也可以使用sort對搜索結(jié)果按照多個字段進(jìn)行排序。例如,用戶可以按照價格進(jìn)行降序排列,然后再按照口碑值進(jìn)行降序排列,對應(yīng)的DSL如下:

GET /hotel/_search
{
  "query": {
    "match": {
      "title": "北京"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      },
      "praise": {
        "order": "desc"
      }
    }
  ]
}

在Java客戶端中對搜索結(jié)果進(jìn)行排序時,可以一次或者多次調(diào)用searchSourceBuilder.sort()方法添加一個或多個排序條件。對應(yīng)上面的排序DSL,Java代碼如下:

    @Test
    public void testNormalFieldSort() throws IOException {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(Arrays.stream("127.0.0.1:9200".split(","))
                .map(host->{
                    String[] split = host.split(":");
                    String hostName = split[0];
                    int port = Integer.parseInt(split[1]);
                    return new HttpHost(hostName,port,HttpHost.DEFAULT_SCHEME_NAME);
                }).filter(Objects::nonNull).toArray(HttpHost[]::new)));
        SearchRequest request = new SearchRequest("hotel");
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("title","北京")).sort("price", SortOrder.DESC)
                .sort("praise",SortOrder.DESC));
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit:searchResponse.getHits()) {
            System.out.println(hit.getSourceAsString()+"  "+hit.getScore());
        }
    }

按地理距離排序

????????使用geo_distance查詢,配合sort可以指定另一種排序規(guī)則,即按照文檔坐標(biāo)與指定坐標(biāo)的距離對結(jié)果進(jìn)行排序。使用時,需要在sort內(nèi)部指定排序名稱為geo_distanc,并指定目的地坐標(biāo)。除了可以指定升序或者降序排列外,還可以指定排序結(jié)果中sort子句中的距離的計量單位,默認(rèn)值為km即千米。在進(jìn)行距離計算時,系統(tǒng)默認(rèn)使用的算法為arc,該算法的特點(diǎn)是計算精準(zhǔn)但是耗費(fèi)時間較長,用戶可以使用distance_type參數(shù)選擇另一種計算速度快但經(jīng)度略差的算法,名稱為plane。如下示例使用geo_distance查詢天安門5km范圍內(nèi)的旅館,并按照距離由近及遠(yuǎn)進(jìn)行排序:????????

GET /hotel/_search
{
  "query": {
    "geo_distance":{
      "distance":"5km",
      "location":{
        "lat":39.915143,
        "lon":116.4039
      }
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat":39.915143,
          "lon":116.4039
        },
        "order": "asc",
        "unit": "km",
        "distance_type": "plane"
      }
    }
  ]
}

????????在Java客戶端中對geo_distance的搜索結(jié)果進(jìn)行排序時,可以調(diào)用SortBuilders.geo DistanceSort()方法新建geo_distance查詢對象的實(shí)例,然后將該實(shí)例傳給searchSource Builder.sort()方法即可完成按照距離排序的要求。對應(yīng)上面的排序DSL,Java代碼如下:

    @Test
    public void testGeoSort() throws IOException {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(Arrays.stream("127.0.0.1:9200".split(","))
                .map(host->{
                    String[] split = host.split(":");
                    String hostName = split[0];
                    int port = Integer.parseInt(split[1]);
                    return new HttpHost(hostName,port,HttpHost.DEFAULT_SCHEME_NAME);
                }).filter(Objects::nonNull).toArray(HttpHost[]::new)));
        SearchRequest request = new SearchRequest("hotel");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.geoDistanceQuery("location").distance(5, DistanceUnit.KILOMETERS)
                .point(39.915143, 116.4039));
        GeoDistanceSortBuilder geoDistanceSortBuilder = SortBuilders.geoDistanceSort("location", 39.915143, 116.4039).point(39.915143, 116.4039).unit(DistanceUnit.KILOMETERS);
        searchSourceBuilder.sort(geoDistanceSortBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        for (SearchHit hit:searchResponse.getHits()) {
            System.out.println(hit.getSourceAsString()+"  "+hit.getScore());
        }
    }

在實(shí)際開發(fā)過程中,往往需要先寫出符合需求的查詢的DSL,然后對照DSL進(jìn)行Java編碼,最后再通過對比兩方的結(jié)果是否一致來判定程序正確與否。文章來源地址http://www.zghlxwxcb.cn/news/detail-504682.html

到了這里,關(guān)于Elasticsearch之排序解析(十二)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Elasticsearch:RestHighLevelClient實(shí)現(xiàn)搜索、分頁、排序、高亮

    Elasticsearch:RestHighLevelClient實(shí)現(xiàn)搜索、分頁、排序、高亮

    1.引入依賴 2.自定義搜索DTO 3.封裝工具類、實(shí)現(xiàn) 分頁、高亮、排序 反射工具類 ReflectUtil 是我自定義的,原理是反射,可以引入hutool的工具包,同樣也可以實(shí)現(xiàn)該結(jié)果

    2024年02月11日
    瀏覽(25)
  • Elasticsearch (ES) 搜索引擎: 搜索功能:搜索分頁、搜索匹配、全文搜索、搜索建議、字段排序

    原文鏈接:https://xiets.blog.csdn.net/article/details/132348920 版權(quán)聲明:原創(chuàng)文章禁止轉(zhuǎn)載 專欄目錄:Elasticsearch 專欄(總目錄) ES 搜索 API 官網(wǎng)文檔:Search APIs 先創(chuàng)建一個索引,并寫入一些文檔用于搜索示例: 寫入一些文檔示例: 官網(wǎng)API:The _source option 搜索結(jié)果中的文檔數(shù)據(jù)封裝

    2024年02月08日
    瀏覽(33)
  • 微服務(wù)分布式搜索引擎 ElasticSearch 搜索結(jié)果處理 排序、分頁與高亮

    微服務(wù)分布式搜索引擎 ElasticSearch 搜索結(jié)果處理 排序、分頁與高亮

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 搜索結(jié)果處理 搜索的結(jié)果可以按照用戶指定的方式去處理或展示。 elasticsearch默認(rèn)是根據(jù)相關(guān)度算分(_score)來排序,但是也支

    2024年02月02日
    瀏覽(44)
  • Elasticsearch搜索輔助功能解析(十)

    Elasticsearch搜索輔助功能解析(十)

    ????????ES提供的各種搜索輔助功能。例如,為優(yōu)化搜索性能,需要指定搜索結(jié)果返回一部分字段內(nèi)容。為了更好地呈現(xiàn)結(jié)果,需要用到結(jié)果計數(shù)和分頁功能;當(dāng)遇到性能瓶頸時,需要剖析搜索各個環(huán)節(jié)的耗時;面對不符合預(yù)期的搜索結(jié)果時,需要分析各個文檔的評分細(xì)節(jié)

    2024年02月13日
    瀏覽(19)
  • ElasticSearch系列 - SpringBoot整合ES:實(shí)現(xiàn)搜索結(jié)果排序 sort

    00. 數(shù)據(jù)準(zhǔn)備 01. Elasticsearch 默認(rèn)的排序方式是什么? ElasticSearch 默認(rèn)的排序方式是相關(guān)性排序。相關(guān)性排序是根據(jù)查詢條件與文檔的匹配程度來計算每個文檔的相關(guān)性得分,然后按照得分從高到低進(jìn)行排序。相關(guān)性排序是 ElasticSearch 中最常用的排序方式,因?yàn)樗梢愿鶕?jù)查詢

    2024年02月02日
    瀏覽(23)
  • elasticsearch[四]-數(shù)據(jù)聚合排序查詢、搜索框自動補(bǔ)全、數(shù)據(jù)同步、集群

    elasticsearch[四]-數(shù)據(jù)聚合排序查詢、搜索框自動補(bǔ)全、數(shù)據(jù)同步、集群

    **聚合(aggregations)**可以讓我們極其方便的實(shí)現(xiàn)對數(shù)據(jù)的統(tǒng)計、分析、運(yùn)算。例如: 什么品牌的手機(jī)最受歡迎? 這些手機(jī)的平均價格、最高價格、最低價格? 這些手機(jī)每月的銷售情況如何? 實(shí)現(xiàn)這些統(tǒng)計功能的比數(shù)據(jù)庫的 sql 要方便的多,而且查詢速度非???,可以實(shí)現(xiàn)近

    2024年01月19日
    瀏覽(18)
  • Elasticsearch 核心技術(shù)(九):搜索結(jié)果處理(分頁、排序、指定返回字段、去重、高亮顯示)

    Elasticsearch 核心技術(shù)(九):搜索結(jié)果處理(分頁、排序、指定返回字段、去重、高亮顯示)

    ?? 博客主頁:水滴技術(shù) ?? 支持水滴: 點(diǎn)贊 ?? + 收藏 ? + 留言 ?? ?? 訂閱專欄:大數(shù)據(jù)核心技術(shù)從入門到精通

    2023年04月13日
    瀏覽(23)
  • Elasticsearch 分布式全文搜索引擎原理解析

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) Elasticsearch是一個開源的分布式全文搜索引擎,它可以近實(shí)時地存儲、檢索數(shù)據(jù)。本系列文章將從以下幾個方面對Elasticsearch進(jìn)行深入分析: Elasticsearch的主要組成部分 索引、類型和映射(Mapping) 搜索請求處理流程 查詢緩存機(jī)制 Elasticsearch集群

    2024年02月05日
    瀏覽(31)
  • Elasticsearch權(quán)威指南:深度解析搜索技術(shù)核心概念、原理及實(shí)踐

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) 2010年,當(dāng)時僅僅30歲的Elasticsearch創(chuàng)始人黃文堅(jiān)就率先發(fā)布了開源分布式搜索引擎Elasticsearch。從此, Elasticsearch 名揚(yáng)天下,成為了當(dāng)前搜索領(lǐng)域的翹楚。隨著 Elasticsearch 的快速崛起,越來越多的人開始關(guān)注并應(yīng)用 Elasticsearch 來進(jìn)行搜索服務(wù)。

    2024年02月10日
    瀏覽(25)
  • 微服務(wù)一實(shí)用篇:分布式搜索引擎(ElasticSearch)基礎(chǔ)解析

    微服務(wù)一實(shí)用篇:分布式搜索引擎(ElasticSearch)基礎(chǔ)解析

    學(xué)習(xí)分布式搜索引擎(ElasticSearch)的基礎(chǔ)知識,包括初識ElasticSearch、倒排索引、ES的一些概念、安裝和分詞器等。

    2024年02月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包