在TairSearch中使用bool進行組合條件查詢
更新時間:
TairSearch是Tair團隊完全自研的全文搜索數(shù)據(jù)結(jié)構,采用和Elasticsearch相似的查詢語法。本文介紹如何在TairSearch中使用bool語法,實現(xiàn)復雜場景的查詢。
bool語法詳解
bool是TairSearch中支持復雜、組合查詢的語法,支持如下3種子句類型:
must:類似
AND
的語義,在must數(shù)組中的條件均為必要條件,查詢結(jié)果集必須命中must數(shù)組中的查詢條件。must_not:類似
NOT
的語義,查詢結(jié)果集必須不包含must_not數(shù)組中的查詢條件。should:類似
OR
的語義,在should數(shù)組中的條件均為可選條件。可搭配minimum_should_match參數(shù)使用,該參數(shù)表示至少需匹配多少個should查詢子句,若bool語句中只存在should語句,則該參數(shù)默認為1;若bool語句中還存在must或must_not語句,則該參數(shù)默認為0。若must和should語句同時命中某文檔,則該文檔會因為多次命中而增加文檔score值,并影響結(jié)果排名。
bool語句的查詢優(yōu)先級為must_not > must > should,同時,bool語句中可嵌套任何類型的子查詢語句,包含bool語句,可由此實現(xiàn)復雜場景的查詢。更多關于TairSearch的信息,請參見Search。
操作樣例
創(chuàng)建索引。
TFT.CREATEINDEX key '{ "mappings": { "properties": { "A": { "type": "keyword" }, "B": { "type": "keyword" }, "C": { "type": "keyword" } } } }'
添加文檔數(shù)據(jù)。
TFT.ADDDOC key '{ "A": "a", "B": "b", "C": "c" }'
查詢示例。
TFT.SEARCH key '{ "query": { "bool" : { "must": [ { "term": { "A": "a" } }, { "term": { "B": "b" } } ] } } }'
TFT.SEARCH key '{ "query": { "bool": { "should": [ { "term": { "A": "a" } }, { "term": { "B": "b" } } ] } } }'
TFT.SEARCH key '{ "query": { "bool": { "must": [ { "term": { "A": "a" } } ], "must_not": [ { "term": { "B": "b" } } ] } } }'
TFT.SEARCH key '{ "query": { "bool" : { "should": [ { "bool": { "must": [ { "term": { "A": "a" } }, { "term": { "B": "b" } } ] } }, { "term": { "C": "c" } } ] } } }'
文檔內(nèi)容是否對您有幫助?