TairSearch是Tair团队完全自研的全文搜索数据结构,采用和Elasticsearch相似的查询语法。本文介绍如何在TairSearch中使用bool语法,实现复杂场景的查询。
bool语法详解
bool是TairSearch中支持复杂、组合查询的语法,支持如下3种子句类型:
must:类似
AND
的语义,在must数组中的条件均为必要条件,查询结果集必须命中must数组中的查询条件。must_not:类似
NOT
的语义,查询结果集必须不包含must_not数组中的查询条件。should:类似
OR
的语义,在should数组中的条件均为可选条件。可搭配minimum_should_match参数使用,该参数表示至少需匹配多少个should查询子句,若bool语句中只存在should语句,则该参数默认为1;若bool语句中还存在must或must_not语句,则该参数默认为0。若must和should语句同时命中某文档,则该文档会因为多次命中而增加文档score值,并影响结果排名。
bool语句的查询优先级为must_not > must > should,同时,bool语句中可嵌套任何类型的子查询语句,包含bool语句,可由此实现复杂场景的查询。更多关于TairSearch的信息,请参见Search。
操作样例
创建索引。
TFT.CREATEINDEX key '{ "mappings": { "properties": { "A": { "type": "keyword" }, "B": { "type": "keyword" }, "C": { "type": "keyword" } } } }'
添加文档数据。
TFT.ADDDOC key '{ "A": "a", "B": "b", "C": "c" }'
查询示例。