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

Elasticsearch常用查詢語法及RestClient操作

這篇具有很好參考價值的文章主要介紹了Elasticsearch常用查詢語法及RestClient操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

DSL Query基本語法

1,查詢所有數(shù)據(jù)matchall(當然并不是會顯示所有數(shù)據(jù))

#查詢所有數(shù)據(jù)
GET /索引名/_search
{
  "query": {
    "查詢類型": {
      "查詢條件":"條件值"
    }
  }
}

Elasticsearch常用查詢語法及RestClient操作,elasticsearch,大數(shù)據(jù),搜索引擎

?2,全文搜索檢索-分詞搜索

match查詢:全文檢索查詢的一種,會對用戶內容分詞,然后去倒排索引庫檢索,語法。

#根據(jù)條件查詢 match

GET /索引名/_search
{
  "query": {
    "查詢類型": {
      "查詢那個字段": "查詢的具體值"
    }
  }
}
# 示例
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "北京"
    }
  }
}

multi_match:和match類似,但是它允許多個字段進行查詢

# 根據(jù)多個字段來搜 multi_match
GET /索引名/_search
{
  "query": {
    "查詢類型": {
      "query": "需要查詢字段的具體值",
      "fields": ["查詢字段1","查詢字段2"]
    }
  }
}

# 根據(jù)多個字段來搜 multi_match
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "北京",
      "fields": ["city","name"]
    }
  }
}

解釋:在hotel索引庫中按照addressname兩個字段搜索值包含北京的文檔

3,精準查詢

精準查詢一般是查找keyword,數(shù)值,日期,boolean等不可分割的字段。

term:根據(jù)詞條精準查詢

range:根據(jù)值的范圍查詢

term查詢

#精準查詢-term
GET /索引名/_search
{
  "query": {
    "查詢類型": {
      "查詢字段": {
        "value": "查詢的具體值"
      }
    }
  }
}

#精準查詢-term
GET /hotel/_search
{
  "query": {
    "term": {
      "city": {
        "value": "上海"
      }
    }
  }
}

解釋:在hotel索引庫中查找city的值等于上海的所有文檔,(city值一定是上海

range查詢-范圍查詢


#精準查詢-范圍查詢range
GET /索引名/_search
{
  "query": {
    "查詢類型": {
      "查詢字段": {
        "gte": 最小值,
        "lte": 最大值
      }
    }
  }
}

GET /hotel/_search
{
  "query": {
    "range": {
      "score": {
        "gte": 10,
        "lte": 45
      }
    }
  }
}

解釋:在hotel索引庫中查詢score的值大于等于10小于等于45的文檔。

4,復合查詢

復合查詢:復合查詢可以將其他簡單查詢組合起來,實現(xiàn)更復雜的邏輯,例如:

funcation_score:算分函數(shù)查詢,可以根據(jù)某些規(guī)則(打分算法)計算文檔得分

1,funcation score Query

Elasticsearch常用查詢語法及RestClient操作,elasticsearch,大數(shù)據(jù),搜索引擎

例如:

#修改得分
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "北京"
        }
      },
      "functions": [
        {
          "filter": {
            "term": {
              "brand": "如家"
            }
          },
          "weight": 10
        }
      ],
      "boost_mode": "multiply"
    }
  }
  
}

解釋:查詢索引庫為hotel索引庫,查詢字段為all,值為北京,過濾brand為如家的文檔,得分方式為默認,乘10.

2,Boolean Query

布爾查詢是一個或者多個子句的組合子查詢的組合方式有
must:必須匹配每個子查詢,類似“與
should:選擇性匹配子查詢,類似“或
must_not:必須不匹配,不參與算分,類似“非
filter:必須匹配,不參與算分

例如,查詢名字包含如家,價格不高于400的酒店

# 使用bool查詢功能
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "如家"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "range": {
              "gt": 400
            }
          }
        }
      ]
    }
  }
}

使用RestClient進行query查詢

建議在上一篇博客基礎上進行

RestClient操作Elasticsearch(Java)-CSDN博客文章瀏覽閱讀838次,點贊30次,收藏12次。Es官方提供了各種不用語言的客戶端,用來操作Es,這些客戶端的本質就是組裝DSL語句,通過http請求發(fā)送給Es,從而簡化操作es基礎篇不熟悉參考一下博客:ElasticSearch入門篇-CSDN博客Elasticsearch是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數(shù)據(jù);本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數(shù)據(jù)。https://blog.csdn.net/qq_63837759/article/details/137755058?spm=1001.2014.3001.5501

全文檢索查詢-分詞搜索

會在倒排索引庫中做分詞匹配,類似于模糊查詢

因為最后的結果需要解析,于是為了后續(xù)代碼的簡潔,我們把解析的代碼單獨書寫出來,這里用的是fastJson:


    /**
     *用來解析返回的數(shù)據(jù),包含高亮處理(針對的是name字段)
     * @param searchResponse 發(fā)送請求之后的響應
     */
    void parseData( SearchResponse searchResponse){
        //解析拿到的數(shù)據(jù)
        //有用的數(shù)據(jù)都在這個對象里面
        SearchHits hits = searchResponse.getHits();
        //獲取數(shù)據(jù)總數(shù)
        long total = hits.getTotalHits().value;
        System.out.println("數(shù)據(jù)總數(shù):"+total);
        //這個數(shù)組里面存放的是每一條數(shù)據(jù)
        SearchHit[] searchHits = hits.getHits();
        for (SearchHit documentFields : searchHits) {
            String sourceJson = documentFields.getSourceAsString();
            HotelDoc hotelDoc = JSON.parseObject(sourceJson, HotelDoc.class);
            //進行高亮的結果解析
            Map<String, HighlightField> highlightFieldMap = documentFields.getHighlightFields();
            if(!CollectionUtils.isEmpty(highlightFieldMap)){
                HighlightField highlightField = highlightFieldMap.get("name");
                if(highlightField!=null){
                    //獲取高亮處理后的name
                    String name = highlightField.fragments()[0].string();
                    hotelDoc.setName(name);
                }
                
            }
            System.out.println(hotelDoc);
        }
    }

1,matchAll查詢(查詢所有數(shù)據(jù),但是只返回十條)

@Test
    void matchAllTest() throws IOException {
        //1,創(chuàng)建請求
        SearchRequest request=new SearchRequest("hotel");
        //2,準備請求參數(shù)
        request.source().query(QueryBuilders.matchAllQuery());
        //3,發(fā)送請求
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //4,解析拿到的數(shù)據(jù)
        parseData(searchResponse);

    }

2,match查詢(根據(jù)一個字段進行查詢)


    /**
     * match查詢,可以指定字段及逆行查詢,但是只能指定一個
     * @throws IOException
     */
    @Test
    void matchTest() throws IOException {
        //1,創(chuàng)建請求
        SearchRequest request=new SearchRequest("hotel");
        //2,準備請求參數(shù),針對all字段,對所有all中包含北京的進查詢
        request.source().query(QueryBuilders.matchQuery("all","北京"));
        //因為es默認返回十條數(shù)據(jù),我們如果向返回多一點,可以設置返回的數(shù)量
        request.source().size(20);
        //3,發(fā)送請求
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        //4,解析拿到的數(shù)據(jù)
        parseData(searchResponse);
    }

3,multi_match:(和match類似,但允許對多個字段進行查詢)


    /**
     * multiMatch查詢,可以指定多個字段
     * @throws IOException
     */
    @Test
    void multiMatchTest() throws IOException {
        SearchRequest request =new SearchRequest("hotel");
        //指定查詢字段的值是多少,并指定那個字段,可以有多個,我們這里指定name,和city
        request.source().query(QueryBuilders.multiMatchQuery("北京","name","city"));
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        parseData(searchResponse);
    }
   
   

精準查詢

精準查詢-字段基本上是keyword類型的不可以在分詞

term查詢


    /**
     * term查詢-根據(jù)詞條精準查詢
     * @throws IOException
     */
    @Test
    void termTest() throws IOException {
        SearchRequest request =new SearchRequest("hotel");
        //指定查詢字段的值是多少,并指定那個字段,這個查詢的值是固定的完全匹配的
        request.source().query(QueryBuilders.termQuery("city","上海"));
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        parseData(searchResponse);
    }

  

range查詢


    /**
     * range查詢-根據(jù)條件范圍插尋
     * @throws IOException
     */
    @Test
    void rangTest() throws IOException {
        SearchRequest request =new SearchRequest("hotel");
        //指定詞條進行范圍插尋,查找評分從20到40 的酒店
        request.source().query(QueryBuilders.rangeQuery("score").gt(20).lt(40));
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        parseData(searchResponse);
    }

對查詢結果做排序分頁


    /**
     * 針對查詢結果做排序和分頁
     * @throws IOException
     */
    @Test
    void PageSortTest() throws IOException {
        int page=3;
        int size=5;
        SearchRequest request =new SearchRequest("hotel");
        //使用matchall查詢所有酒店
        request.source().query(QueryBuilders.matchAllQuery());
        //對查詢結果進行排序和分頁,from:第幾頁。size;每頁大小
        request.source().from((page-1)*size).size(size);
        //排序,針對價格字段降序,從高到低
        request.source().sort("price", SortOrder.DESC);
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        parseData(searchResponse);
    }

對查詢結果做高亮處理

/**
     * 對查詢結果高亮處理
     * @throws IOException
     */
    @Test
    void HignLightTest() throws IOException {
        SearchRequest request =new SearchRequest("hotel");
        //指定詞條進行范圍插尋,查找all字段中包含如家的酒店
        request.source().query(QueryBuilders.matchQuery("all","如家"));
        //查詢后的name字段高亮處理,可以指定多個字段進行高亮
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
        SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        parseData(searchResponse);
    }

至此,es基礎查詢完結,了解更多,可查看官方文檔!?。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-858009.html

Quick start | Elasticsearch Guide [8.13] | Elastichttps://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html文章來源地址http://www.zghlxwxcb.cn/news/detail-858009.html

到了這里,關于Elasticsearch常用查詢語法及RestClient操作的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • ES查詢常用語法

    目錄 1. ElasticSearch之查詢返回結果各字段含義 2. match 查詢 3. term查詢 4. terms 查詢 5. range 范圍 6. 布爾查詢 6.1 filter加快查詢效率的原因 7. boosting query(提高查詢) 8. dis_max(最佳匹配查詢) 9. 分頁 10. 聚合查詢【內含實際的demo】 執(zhí)行命令:索引庫名稱/_search 空搜索的結果為: 按照

    2023年04月09日
    瀏覽(23)
  • solr快速上手:常用查詢語法(八)

    solr快速上手:常用查詢語法(八)

    solr作為搜索引擎,就像我們使用mysql一樣,在日常業(yè)務中,更多接觸的則是各類操作語法,所以今天,我們再來學習solr的常用查詢語法,為大家在工作中最基本的solr查詢打下基礎。 solr快速上手:solr簡介及安裝(一) solr快速上手:核心概念及solr-admin界面介紹(二) solr快速

    2024年02月09日
    瀏覽(18)
  • Springboot 整合ElasticSearch 常用的插入查詢,模糊查詢,范圍查詢

    Springboot 整合ElasticSearch 常用的插入查詢,模糊查詢,范圍查詢

    repository.deleteById(id); } catch (Exception ex) { ex.printStackTrace(); return false; } return true; } public Dog saveDog(Dog dog) { try { Dog save = repository.save(dog); System.out.println(“結果:”+save.toString()); return save; } catch (Exception ex) { ex.printStackTrace(); return null; } } public Boolean saveDogAll(List dogsList) { try { reposit

    2024年04月22日
    瀏覽(22)
  • 【ElasticSearch】ElasticSearch常用查詢api集合(一)

    【ElasticSearch】ElasticSearch常用查詢api集合(一)

    本文為es常見DSL搜索入門帖子 開始之前先貼個對應關系,方便各位理解 在es7+的版本中,是沒有類型的概念的,所以,添加數(shù)據(jù)直接在索引中添加; ?請求es地址均為 localhost:9200/{索引}/_search ,為了編寫方便些,在下面的例子中會直接寫請求體; bool : 用來組合多個條件

    2024年02月11日
    瀏覽(51)
  • 常用的Elasticsearch查詢DSL

    1.基本查詢 2.多條件查詢 3.范圍查詢 4.復雜查詢 5.聚合查詢

    2024年02月12日
    瀏覽(27)
  • ElasticSearch常用查詢命令查看基本信息

    查看es的集群狀態(tài) http://IP:9200/_cat/healthv 注: IP指es集群某個ip地址, v表示格式化輸出 查看es集群節(jié)點列表 http://IP:9200/_cat/nodesv 查看es集群所有索引及數(shù)據(jù)大小 http://IP:9200/_cat/indicesv 查看單個索引結構信息 http://IP:9200/indexNamepretty=true 注: indexName是索引名字, pretty=true表示格式化輸出

    2024年02月03日
    瀏覽(23)
  • 【微服務】Elasticsearch常用查詢&結果處理(三)

    【微服務】Elasticsearch常用查詢&結果處理(三)

    ??Es學習·第三站~ ??Es學習起始站:【微服務】Elasticsearch概述環(huán)境搭建(一) ??本文已收錄至專欄:微服務探索之旅 ??希望您能有所收獲 在上一站的學習中,我們已經導入了大量數(shù)據(jù)到es中,實現(xiàn)了數(shù)據(jù)存儲功能。接下來如需看自己實操效果請根據(jù)上一站的 三.環(huán)境搭建 部

    2024年02月04日
    瀏覽(21)
  • RestClient操作文檔和DSL查詢語法

    RestClient操作文檔和DSL查詢語法

    注:一般不用上方地理查詢,用下面方法! 算法了解 4.1、Function Score Query(修改相關性算分) 4.2、Boolean Query

    2024年02月16日
    瀏覽(20)
  • Elasticsearch 常用的增加、刪除、修改、查詢語句

    新增 刪除 修改 批量增刪改 查詢 查詢指定索引下全部數(shù)據(jù) 查詢指定索引下指定id的數(shù)據(jù) 查詢指定索引下全部數(shù)據(jù) 查詢指定值(match) 在多個字段中查詢指定值(multi_match) match、multi_match是模糊匹配,匹配時會對所查找的進行分詞,然后按分詞匹配查找。 term 查詢

    2024年02月03日
    瀏覽(31)
  • MySQL 查詢常用操作(2) —— 條件查詢 where

    MySQL中常用的查詢操作,首先是能直接從表中直接取出數(shù)據(jù),接著能對查詢結果做一些簡單的處理,比如去重等,然后是根據(jù)條件查詢數(shù)據(jù),包括精準查詢、模糊查詢以及按照數(shù)據(jù)的某個范圍或者指定多個指標進行查詢,值得注意的是,MySQL中的一些查詢會忽略空值。最后是將

    2023年04月10日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包