<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Terms set 查詢根據匹配給定欄位的精確術語的最少數量返回檔案。
Terms set query 和 Terms query 之間的唯一區別是你可以提供必須匹配的最少數量的術語才能檢索特定檔案。
指向檔案的數位(numeric)欄位名稱,其值應用作要匹配的最少術語數,以便返回檔案。
一個自定義指令碼,用於確定為了返回檔案而必須匹配的最少術語數。 如果你必須動態設定匹配所需的術語數,那麼它將很有幫助。
讓我們首先建立索引:
` PUT product { "mappings": { "properties": { "name": { "type": "keyword" }, "tags": { "type": "keyword" }, "tags_count": { "type": "long" } } } } `![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
讓我們索引樣本檔案:
` POST product/_doc/prod1 { "name":"Iphone 13", "tags":["apple","iphone","mobile"], "tags_count":3 } POST product/_doc/prod2 { "name":"Iphone 12", "tags":["apple","iphone"], "tags_count":2 } POST product/_doc/prod3 { "name":"Iphone 11", "tags":["apple","mobile"], "tags_count":2 } `![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
用例 1:下面的查詢將返回所有 3 個檔案,因為 prod1 的最小術語匹配 (tags_count) 是 3,prod2 是 2,prod3 是 2,查詢中傳遞了總共 3 個術語("apple", "iphone", "mobile")。
POST product/_search { "query": { "terms_set": { "tags": { "terms": [ "apple", "iphone", "mobile" ], "minimum_should_match_field": "tags_count" } } } }
上述查詢的結果是:
` "hits": { "total": { "value": 3, "relation": "eq" }, "max_score": 1.4010588, "hits": [ { "_index": "product", "_id": "prod1", "_score": 1.4010588, "_source": { "name": "Iphone 13", "tags": [ "apple", "iphone", "mobile" ], "tags_count": 3 } }, { "_index": "product", "_id": "prod2", "_score": 0.7876643, "_source": { "name": "Iphone 12", "tags": [ "apple", "iphone" ], "tags_count": 2 } }, { "_index": "product", "_id": "prod3", "_score": 0.7876643, "_source": { "name": "Iphone 11", "tags": [ "apple", "mobile" ], "tags_count": 2 } } ] }`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
用例二:下面的查詢將只返回一個檔案,因為查詢中只傳遞了 2 個術語,僅與 prod3 匹配。 prod1 將不會返回,因為 tags_count 值為 3 並且查詢中傳遞的總術語僅為 2。
POST product/_search { "query": { "terms_set": { "tags": { "terms": [ "apple", "mobile" ], "minimum_should_match_field": "tags_count" } } } }
上述查詢的結果為:
` "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.5007585, "hits": [ { "_index": "product", "_id": "prod3", "_score": 0.5007585, "_source": { "name": "Iphone 11", "tags": [ "apple", "mobile" ], "tags_count": 2 } } ] }`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
現在讓我們看看如何使用 minimum should match 的動態值檢索相同的索引資料。
在下面的範例中,查詢中提供的術語總數的值將作為最小應匹配值傳遞。 我們將使用 params.num_terms 來計算查詢中提供的術語數。 需要匹配的詞條數不能超過 params.num_terms,即 terms 欄位中提供的詞條數。
POST product/_search { "query": { "terms_set": { "tags": { "terms": ["apple","iphone"], "minimum_should_match_script": { "source": "params.num_terms" } } } } }
它將返回 prod1 和 prod2,因為 minimum_should_match 值將設定為 2,因為我們在查詢中僅傳遞了 2 個術語。上述命令的返回值為:
` "hits": [ { "_index": "product", "_id": "prod2", "_score": 0.5007585, "_source": { "name": "Iphone 12", "tags": [ "apple", "iphone" ], "tags_count": 2 } }, { "_index": "product", "_id": "prod1", "_score": 0.5007585, "_source": { "name": "Iphone 13", "tags": [ "apple", "iphone", "mobile" ], "tags_count": 3 } } ] }`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
讓我們考慮一個場景,你想要考慮 tags_count 的最小值或查詢中的術語數; 在這種情況下,以下查詢會有所幫助:
POST product/_search { "query": { "terms_set": { "tags": { "terms": ["apple","iphone"], "minimum_should_match_script": { "source": "Math.min(params.num_terms, doc['tags_count'].value)" } } } } }
上述查詢的結果為:
` "hits": [ { "_index": "product", "_id": "prod2", "_score": 0.61233616, "_source": { "name": "Iphone 12", "tags": [ "apple", "iphone" ], "tags_count": 2 } }, { "_index": "product", "_id": "prod1", "_score": 0.61233616, "_source": { "name": "Iphone 13", "tags": [ "apple", "iphone", "mobile" ], "tags_count": 3 } } ] }`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
下面的程式碼將有助於使用 Elasticsearch Java 使用者端實現術語集查詢。
` List<String> tags = new ArrayList<String>(); tags.add("apple"); tags.add("iphone"); // Using minimum_should_match_field param Query query1 = Query.of(q -> q.bool(BoolQuery.of(bq -> bq.must(ts -> ts.termsSet( TermsSetQuery.of(tq -> tq.field("tags").minimumShouldMatchField("tags_count").terms(tags))))))); //Using minimum_should_match_script param Map<String, JsonData> param = new HashMap<String, JsonData>(); Query query1 = Query .of(q -> q.bool(BoolQuery.of(bq -> bq.must(ts -> ts.termsSet(TermsSetQuery.of(tq -> tq.field("tags") .minimumShouldMatchScript(sc -> sc.inline(in -> in.lang("painless").source("params.num_terms").params(param))) .terms(tags))))))); `![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
` Map<String, Object> param = new HashMap<String, Object>(); Script script = new Script(ScriptType.INLINE, "painless", "params.num_terms", param); List<String> tags = new ArrayList<String>(); tags.add("apple"); tags.add("iphone"); // Using minimum_should_match_field QueryBuilder query = QueryBuilders.boolQuery() .must(new TermsSetQueryBuilder("tags", tags).setMinimumShouldMatchField("tags_count")); // Using minimum_should_match_script Map<String, Object> param = new HashMap<String, Object>(); Script script = new Script(ScriptType.INLINE, "painless", "params.num_terms", param); QueryBuilder query = QueryBuilders.boolQuery() .must(new TermsSetQueryBuilder("tags", tags).setMinimumShouldMatchScript(script)); `![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
以上就是Elasticsearch學習之Terms set 查詢的詳細內容,更多關於Elasticsearch Terms set 查詢的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45