ElasticSearch搜尋欄位不需要計入得分
ElasticSearch的索引同步對物理刪除的資料需要做一些對應的操作才能同步,一般都是採用狀態判斷是否刪除,所以資料同步到es索引中,我麼在查詢時需要對資料的狀態進行判斷,同時這個條件我們不希望他會影響最終查詢記錄的得分,這個時候就需要用到ConstantScoreQueryBuilder構造器了。
這裡寫的全是後臺的查詢的程式碼。如果說想看具體的es查詢語句,可以在後臺列印出來對應的查詢語句。
在使用ConstantScoreQueryBuilder時,我們肯定會有其他的查詢條件,所以還會用到BoolQueryBuilder這個構造器,這是個複雜查詢構造器,可以有多個查詢條件,可以通過and或者or進行連線。
// searchSourceBuilder將查詢轉換為es的查詢語句
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 使用BoolQueryBuilder物件(複雜查詢)
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(keyWord, "title", "description")
.type(MultiMatchQueryBuilder
.Type.BEST_FIELDS);
// 精準匹配(不分詞)
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("delete_flag", 0);
// 使用constantScoreQuery查詢不計入得分
ConstantScoreQueryBuilder constantScoreQueryBuilder = QueryBuilders.constantScoreQuery(termQueryBuilder);
boolQueryBuilder.must(multiMatchQueryBuilder)
.must(constantScoreQueryBuilder);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
將兩個查詢條件裝入boolQueryBuilder之後,在交給searchSourceBuilder 進行轉換為es查詢語句。這樣就完成啦。
看下效果
"query": {
"bool": {
"must": [{
"multi_match": {
"query": "測試",
"fields": ["description^1.0", "title^1.0"],
"type": "best_fields",
"operator": "OR",
"slop": 0,
"prefix_length": 0,
"max_expansions": 50,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"fuzzy_transpositions": true,
"boost": 1.0
}
}, {
"constant_score": {
"filter": {
"term": {
"delete_flag": {
"value": 0,
"boost": 1.0
}
}
},
"boost": 1.0
}
}],
"adjust_pure_negative": true,
"boost": 1.0
}
},
must的相當於and的意思
相關文章
- [Elasticsearch] 多欄位搜尋 (二) - 最佳欄位查詢及其調優(轉)Elasticsearch
- Elasticsearch 向量搜尋Elasticsearch
- Elasticsearch常用搜尋Elasticsearch
- elasticsearch搜尋商品Elasticsearch
- Elasticsearch——全文搜尋Elasticsearch
- 搜尋引擎ElasticSearch18_ElasticSearch程式設計操作5Elasticsearch程式設計
- Elasticsearch從入門到放棄:再聊搜尋Elasticsearch
- ElasticSearch全文搜尋引擎Elasticsearch
- elasticsearch之拼音搜尋Elasticsearch
- Elasticsearch 為了搜尋Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- ElasticSearch分散式搜尋引擎——從入門到精通Elasticsearch分散式
- 認識搜尋引擎 ElasticsearchElasticsearch
- elasticsearch(五)---分散式搜尋Elasticsearch分散式
- (1)分散式搜尋ElasticSearch認識ElasticSearch分散式Elasticsearch
- 分散式搜尋引擎Elasticsearch基礎入門學習分散式Elasticsearch
- ES(Elasticsearch)支援PB級全文搜尋引擎入門教程Elasticsearch
- Flutter 搜尋建議欄Flutter
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- 搜尋引擎ElasticSearch18_ElasticSearch簡介1Elasticsearch
- Laravel + Elasticsearch 實現中文搜尋LaravelElasticsearch
- 【elasticsearch】搜尋過程詳解Elasticsearch
- Elasticsearch搜尋資料彙總Elasticsearch
- Elasticsearch 實現簡單搜尋Elasticsearch
- Laravel 使用 Elasticsearch 全域性搜尋LaravelElasticsearch
- Elasticsearch 統計某欄位有值的文件數Elasticsearch
- win10自帶搜尋欄如何關閉 win10取消搜尋欄Win10
- ElasticSearch(十)Elasticsearch檢索出的資料列表按欄位匹配的優先順序及搜尋單詞拼音一部分搜不到資料Elasticsearch
- win10搜尋欄無法輸入文字怎麼辦_win10電腦搜尋欄無法輸入的解決方法Win10
- MacOS的Safari搜尋欄無法搜尋怎麼解決?Mac
- elasticsearch實現基於拼音搜尋Elasticsearch
- ElasticSearch 簡單的 搜尋 聚合 分析Elasticsearch
- Elasticsearch核心技術(五):搜尋API和搜尋執行機制ElasticsearchAPI
- 開放搜尋開源相容版,支援Elasticsearch做搜尋召回引擎Elasticsearch
- Elasticsearch 單字串多欄位查詢Elasticsearch字串
- vscode 關閉頂部搜尋欄VSCode
- elasticsearch 搜尋引擎工具的高階使用Elasticsearch