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

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等)

這篇具有很好參考價(jià)值的文章主要介紹了ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

DSL 查詢種類

  • 查詢所有:查詢所有數(shù)據(jù),一般在測試時(shí)使用。march_all,但是一般顯示全部,有一個(gè)分頁的功能
  • 全文檢索(full text)查詢:利用分詞器對用戶的輸入內(nèi)容進(jìn)行分詞,然后去倒排索引庫匹配。例如:
    • match_query
    • mutil_match_query
  • 精確查詢:根據(jù)精確詞條值查詢數(shù)據(jù),一般查找的時(shí)keyword、數(shù)值、日期、boolean等字段。例如:
    • ids
    • term
    • range
  • 地理查詢(geo):根據(jù)經(jīng)緯度查詢,例如:
    • geo_distance
    • geo_bounding_box
  • 復(fù)合(compound)查詢:復(fù)合查詢時(shí)將上面各種查詢條件組合在一起,合并查詢條件。例如:
    • bool
    • funcation_score

DSL query 基本語法

1、全文檢索

# DSL查詢
GET /indexName/_search
{
  "query":{
    "查詢類型":{
      "查詢條件":"條件值"
    }
  }
}

match 與 multi_match 的與別是前者根據(jù)單字段查,后者根據(jù)多字段查。
參與搜索的字段越多,查詢效率越低,建議利用copy_to將多個(gè)檢索字段放在一起,然后使用match—all字段查。

GET /hotel/_search
{
  "query": {
    "match": {
      "city": "上海"
    }
  }
}

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  }
}

 GET /hotel/_search
 {
   "query": {
     "multi_match": {
       "query": "如家",
       "fields": ["name","brand","business"]
     }
   }
 }

2、精確查詢

精確查詢: term字段全值匹配,range字段范圍匹配。
精確查詢一般查找keyword、數(shù)值、boolean等不可分詞的字段

# term
GET /hotel/_search
{
  "query": {
    "term": {
      "city": {
        "value": "北京"
      }
    }
  }
}
# range
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gt": 1000,
        "lt": 2000
      }
    }
  }
}

3、地理查詢

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

GET /hotel/_search
{
  "query": {
    "geo_bounding_box": {
      "location": {
        "top_left": {
          "lat": 31.1,
          "lon": 121.5
        },
        "bottom_right": {
          "lat": 30.9,
          "lon": 121.7
        }
      }
    }
  }
}

GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "distance": "20km",
      "location": {
        "lat": 31.13,
        "lon": 121.8
      }
    }
  }
}

4、function score (算分控制)

復(fù)合查詢(compound ):將簡單查詢條件組合在一起,實(shí)現(xiàn)復(fù)雜搜索邏輯。

  • function score:算分函數(shù)查詢,可以控制文檔的相關(guān)性算分,控制排名。例如百度競價(jià)

es在5.1及之后就棄用了 TF-IDF 算法,開始采用 BM25算法。BM25算法不會(huì)因?yàn)樵~的出現(xiàn)頻率變大而導(dǎo)致算分無限增大,會(huì)逐漸趨近一個(gè)值
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

function score query :可以修改文檔相關(guān)性算分,得到新的算分。
三要素

  • 過濾條件:決定哪些條件要加分
  • 算分函數(shù):如何計(jì)算function score
  • 加權(quán)方式:function score 與 query score如何運(yùn)算
    ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "如家酒店"
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "city": "上海"
            }
          },
          "weight": 10
        }
      ],
      "boost_mode": "sum"
    }
  }
}

5、bool 查詢

boolean query:布爾查詢是一個(gè)或多個(gè)子查詢的組合。

  • must:必須匹配每個(gè)子查詢,類似”and“
  • should:選擇性匹配子查詢,類似”or“
  • must_not:必須不匹配,不參與算分,類似”非“
  • filter:必須匹配,不參與算分
    ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "all": "上海"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gt": 500
            }
          }
        }
      ],
      "filter": [
        {
          "geo_distance": {
            "distance": "10km",
            "location": {
              "lat": 31.21,
              "lon": 121.5
            }
          }
        }
      ]
    }
  }
}

搜索結(jié)果處理

1、排序

es支持對搜索結(jié)構(gòu)進(jìn)行排序,默認(rèn)是根據(jù)相關(guān)度算分(_score)進(jìn)行排序??梢耘判虻淖侄斡衚eyword,數(shù)值、地理坐標(biāo)、日期類型等。

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },"sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]
}
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },"sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.2,
          "lon": 121.5
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

這個(gè)排序的結(jié)果就是相聚的公里數(shù)。
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

2、分頁

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
針對深度分頁;ES給出了兩種方案

  • search after:分頁時(shí)需要排序,原理是從上次的排序值開始(末尾值),查詢下一頁的數(shù)據(jù)。官方推薦使用,不會(huì)太占內(nèi)存。手機(jī)向下反動(dòng)滾頁。
  • scroll:原理是將排序數(shù)據(jù)形成快照,保存在內(nèi)存。不推薦

3、高亮

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

ES默認(rèn)搜索字段和高亮字段必須一致,否則不會(huì)高亮?;蛘呤褂?"require_field_match": "false" 也能高亮。

最后將查詢結(jié)果中 highlight 與 指定高亮的字段進(jìn)行替換返回給前端就行。
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

RestClient操作

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java

ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java
普通查詢

    @Test
    public void  testMatchAll() throws IOException {
        SearchRequest searchRequest = new SearchRequest("hotel");
        searchRequest.source().query(
                QueryBuilders.matchAllQuery()
        );
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        SearchHits searchHits = searchResponse.getHits();

        long value = searchHits.getTotalHits().value;
        System.out.println(value);
        SearchHit[] hits = searchHits.getHits();
        System.out.println(hits[0]);
        HotelDoc hotelDoc = JSON.parseObject(hits[0].getSourceAsString(), HotelDoc.class);
        System.out.println(hotelDoc);
    }





        QueryBuilders.matchAllQuery()
        QueryBuilders.matchQuery("all","如家")
        QueryBuilders.multiMatchQuery("如家","name","brand","business")
        QueryBuilders.termQuery("city","上海")
        QueryBuilders.rangeQuery("price").gt(100).lt(400)
        
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        boolQueryBuilder.must(QueryBuilders.termQuery("city","北京"));
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gt(100).lt(400));

分頁和排序

    public void testPageAndSort() throws IOException {
        int pageNum = 2, pageSize = 10;

        SearchRequest searchRequest = new SearchRequest("hotel");
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("brand", "如家");
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("all", "北京");
        boolQueryBuilder.must(termQueryBuilder);
        boolQueryBuilder.must(matchQueryBuilder);

        searchRequest.source().query(boolQueryBuilder);
        searchRequest.source().from((pageNum - 1) * pageSize).size(pageSize);
        searchRequest.source().sort("price", SortOrder.ASC);

        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            String source = hit.getSourceAsString();
            HotelDoc hotelDoc = JSON.parseObject(source, HotelDoc.class);
            System.out.println(hotelDoc);
        }
    }

高亮

    public void testHighLight() throws IOException {
        SearchRequest searchRequest = new SearchRequest("hotel");

        searchRequest.source().query(QueryBuilders.matchQuery("all","如家"));
        searchRequest.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            String source = hit.getSourceAsString();
            HotelDoc hotelDoc = JSON.parseObject(source, HotelDoc.class);

            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            if(!highlightFields.isEmpty()){
                HighlightField highlightField = highlightFields.get("name");
                //一般value只有一個(gè)元素,取數(shù)組第一個(gè)
                String name = highlightField.getFragments()[0].string();
                hotelDoc.setName(name);
            }
            System.out.println(hotelDoc);
        }
    }

算分
讓指定酒店置頂 (function_score )廣告業(yè)務(wù)
ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等),ElasticSearch,elasticsearch,大數(shù)據(jù),搜索引擎,java文章來源地址http://www.zghlxwxcb.cn/news/detail-659969.html

    // 算分控制
    FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(
            // 原始查詢
            boolQueryBuilder,
            // FunctionScore 數(shù)組
            new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                    new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                            QueryBuilders.termQuery("isAD", true),
                            ScoreFunctionBuilders.weightFactorFunction(10)
                    )
            }
    );

到了這里,關(guān)于ElasticSearch DSL語句(bool查詢、算分控制、地理查詢、排序、分頁、高亮等)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 第七章-分布式搜索引擎-ES:全文查詢、分詞查詢、精確查詢、地理坐標(biāo)查詢、組合查詢(bool、funtion_score)以及RestApi

    第七章-分布式搜索引擎-ES:全文查詢、分詞查詢、精確查詢、地理坐標(biāo)查詢、組合查詢(bool、funtion_score)以及RestApi

    DSL查詢分類 全文查詢、分詞查詢、非分詞查詢、地理坐標(biāo)查詢、組合查詢 match_all 查詢所有,不需要查詢條件,固定寫法_search 第一個(gè)hits就是命中的數(shù)據(jù)?,total就是條數(shù),第二個(gè)hits是source嘞 ? 全文檢索查詢 我們不要整多個(gè)字段查詢,參與的字段越多,查詢速度越慢,如果有

    2024年01月16日
    瀏覽(33)
  • Elasticsearch查詢 - Bool查詢

    在Elasticsearch中, Bool查詢 是一種 組合查詢 ,可以用于將多個(gè)查詢組合在一起,并使用 邏輯運(yùn)算符 (AND、OR、NOT)對它們進(jìn)行組合。與其他三種基本查詢不同,Bool查詢可以實(shí)現(xiàn)更為復(fù)雜的查詢需求。 下面對四種基本查詢和Bool查詢進(jìn)行簡單對比: Term Query: 精確匹配 單個(gè)值,

    2024年02月06日
    瀏覽(16)
  • Elasticsearch之常用DSL語句

    目錄 ? 1. Elasticsearch之常用DSL語句 1.1 操作索引 1.2 文檔操作 1.3 DSL查詢 1.4 搜索結(jié)果處理 1.5 數(shù)據(jù)聚合 ? mapping是對索引庫中文檔的約束,常見的mapping屬性包括: - type:字段數(shù)據(jù)類型,常見的簡單類型有: ? - 字符串:text(可分詞的文本)、keyword(精確值,例如:品牌、國家

    2024年02月04日
    瀏覽(23)
  • java直接使用dsl語句查詢ES

    java直接使用dsl語句查詢ES

    2024年02月03日
    瀏覽(27)
  • 工作常用ES DSL查詢語句(干貨滿滿)

    工作常用ES DSL查詢語句(干貨滿滿)

    ?? 工作中幾乎每天都需要使用到ES查詢數(shù)據(jù),需要根據(jù)自己的查詢需求構(gòu)造DSL查詢語句來實(shí)現(xiàn),本文記錄并分享本人工作中常用的DSL語句以及所遇到問題的解決方案,DSL語句靈活多變,可進(jìn)行多種組合,任你搭配,讓我們一起往下看,希望對你有幫助。 2.1 查看所有索引的

    2024年02月02日
    瀏覽(24)
  • ElasticSearch系列 - SpringBoot整合ES:組合多個(gè)查詢條件 bool 查詢

    01. ElasticSearch 布爾查詢是什么? 在實(shí)際應(yīng)用中,我們很有可能會(huì)查詢多個(gè)值或字段。 一個(gè) bool 查詢由三部分組成: must:所有的語句都必須(must) 匹配,與 AND 等價(jià)。 must_not:所有的語句都不能(must not)匹配,與 NOT 等價(jià)。 should:至少有一個(gè)語句要匹配,與 OR 等價(jià)。 02.

    2023年04月08日
    瀏覽(27)
  • Elasticsearch 中 bool組合查詢(must 和 should 組合)

    需求 查詢考試成績是 60分 或 90分 的 女生 。 所以查詢條件應(yīng)該這么寫 sex == \\\'女\\\' ( score == 60 || score ==90 ); ?先看下bool的語法 在ES中的實(shí)現(xiàn) 方式一: 在bool查詢的must 中再嵌套一層bool來做should過濾。 方式二: 使用 minimum_should_match 選項(xiàng) ,至少匹配一項(xiàng)should子句。 GET stu/_search

    2023年04月09日
    瀏覽(16)
  • 【ElasticSearch】DSL查詢語法

    【ElasticSearch】DSL查詢語法

    Elasticsearch提供了基于JSON的DSL(Domain Specific Language)來定義查詢。官方文檔: 其中,常見的查詢類型有: 查詢所有 :查詢出所有數(shù)據(jù),一般測試用。例如: 全文檢索(full text)查詢 :利用分詞器對用戶輸入內(nèi)容分詞,然后去倒排索引庫中匹配。例如: 精確查詢 :根據(jù)精確

    2024年02月16日
    瀏覽(21)
  • ElasticSearch - DSL查詢語法

    ElasticSearch - DSL查詢語法

    目錄 DSL查詢分類 全文檢索查詢 精確查詢 地理查詢 復(fù)合查詢 相關(guān)性算分 算分函數(shù)查詢 BooleanQuery DSL查詢分類 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)來定義查詢 常見的查詢類型包括: 查詢所有:查詢出所有的數(shù)據(jù),一般測試用;例如:match_all 全文檢索(full text)查詢

    2023年04月08日
    瀏覽(41)
  • 【Elasticsearch】DSL查詢文檔

    【Elasticsearch】DSL查詢文檔

    目錄 1.DSL查詢文檔 1.1.DSL查詢分類 1.2.全文檢索查詢 1.2.1.使用場景 1.2.2.基本語法 1.2.3.示例 1.2.4.總結(jié) 1.3.精準(zhǔn)查詢 1.3.1.term查詢 1.3.2.range查詢 1.3.3.總結(jié) 1.4.地理坐標(biāo)查詢 1.4.1.矩形范圍查詢 1.4.2.附近查詢 1.5.復(fù)合查詢 1.5.1.相關(guān)性算分 1.5.2.算分函數(shù)查詢 1)語法說明 2)示例 3)小

    2024年02月16日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包