全部產品
Search
文件中心

ApsaraDB for Redis:Search

更新時間:Jun 19, 2024

TairSearch是Tair全自研的全文檢索搜尋資料結構,採用和Elasticsearch相似(ES-LIKE)的查詢文法。

TairSearch簡介

TairSearch具有如下主要特點:

  • 低延遲、高效能:依託Tair的超高效能運算能力,提供毫秒層級的寫入和全文檢索搜尋能力,更多資訊請參見TairSearch效能白皮書

  • 增量、局部更新:支援文檔的累加式更新與局部索引更新,包括追加欄位、更新欄位、刪除欄位以及欄位自增等。

  • 文法靈活:支援更加靈活、可讀性更強的JSON查詢文法,提供Bool、Match、Term、分頁等查詢功能,文法與Elasticsearch類似,同時支援自訂排序。

  • 彙總查詢:支援Terms、Metrics、Filter等彙總運算元,更多資訊請參見Aggregations介紹

  • Auto-complete Suggestion:支援首碼模糊搜尋、自動補全等功能。

  • 分詞定製:提供豐富、強大的分詞器,內建英文(Standard、Stop等)、中文(Jieba、IK)及世界主要語言分詞器,同時支援Custom自訂分詞器,允許自訂使用者字典和停用詞等,更多資訊請參見Search分詞器

  • 索引分區查詢:支援使用TFT.MSEARCH命令同時對多個索引分區(Shard index)進行查詢,並自動返回已彙總的結果集。

  • 壓縮儲存:支援文檔層級的壓縮儲存(預設未開啟),從而節省記憶體佔用空間。

  • 查詢快取:支援將最近的查詢結果(可自訂)儲存在緩衝,從而提高熱點資料的查詢效率。

發布記錄

記憶體型(相容Redis 5.0)

  1. 2022年03月11日發布1.7.27版本,首次發布TairSearch。

  2. 2022年05月24日發布1.8.5版本,支援TairSearch Aggregations(彙總)功能。

  3. 2022年09月06日發布5.0.15版本,支援TFT.MSEARCH功能。

  4. 2023年01月13日發布5.0.25版本,全面支援分詞器架構。

  5. 2023年03月15日發布5.0.28版本,支援查詢快取,支援文檔壓縮儲存,新增TFT.ANALYZER命令。

  6. 2023年06月12日發布5.0.35版本,支援數群組類型的文檔,支援Okapi BM25演算法。

記憶體型(相容Redis 6.0)

  1. 2023年02月07日發布6.2.4.1版本,首次支援TairSearch。

    該版本能力對齊記憶體型(相容Redis 5.0)的5.0.25版本。

  2. 2023年03月14日發布6.2.5.0版本,支援查詢快取,支援文檔壓縮儲存,新增TFT.ANALYZER命令。

    該版本能力對齊記憶體型(相容Redis 5.0)的5.0.28版本。

  3. 2023年06月12日發布6.2.7.3版本,支援數群組類型的文檔,支援Okapi BM25演算法。

    該版本能力對齊記憶體型(相容Redis 5.0)的5.0.35版本。

  4. 2023年12月21日發布23.12.1.2版本,支援TFT.EXPLAINSCORE命令。

最佳實務

前提條件

執行個體為Tair記憶體型

  • 記憶體型(相容Redis 5.0):小版本為1.7.27及以上。

  • 記憶體型(相容Redis 6.0):小版本為6.2.4.1及以上。

說明

最新小版本將提供更豐富的功能與穩定的服務,建議將執行個體的小版本升級到最新,具體操作請參見升級小版本。如果您的執行個體為叢集執行個體或讀寫分離架構,請將代理節點的小版本也升級到最新,否則可能出現命令無法識別的情況。

注意事項

  • 操作對象為Tair執行個體中的TairSearch資料。

  • 為節省記憶體,推薦使用如下方法:

    • 建立索引(index)時請將文檔中需要建立(反向)索引的欄位設定為索引欄位(將欄位的index設定為true),其餘欄位的index設定為false。

    • 使用_source參數中的include與exclude機制剔除來源文件中不需要的欄位(field),儲存需要的資訊。

    • 若文檔需要進行分詞處理,請選擇合適的分詞器,避免不合適的分詞器拆成出過多、無用的Token(詞元),增加記憶體開銷。

    • 若文檔較大,您可以合理使用文檔壓縮功能對文檔進行透明壓縮(自動壓縮、解壓)。

  • 避免在單個索引中插入過多的文檔,建議將文檔存入多個不同的索引中,並控制單個索引的文檔數在500萬以下,從而規避(叢集)執行個體發生資料扭曲,均衡讀寫流量,避免造成大Key與熱key。

命令列表

表 1. 全文檢索索引命令

命令

文法

說明

TFT.CREATEINDEX

TFT.CREATEINDEX index mappings settings

建立索引(index)並添加映射(mappings),映射文法類似ES文法。在添加索引文檔前,必須先建立索引。

TFT.UPDATEINDEX

TFT.UPDATEINDEX index mappings settings

向指定的索引中新增properties欄位,或修改索引設定。

TFT.GETINDEX

TFT.GETINDEX index

擷取索引的映射內容。

TFT.ADDDOC

TFT.ADDDOC index document [WITH_ID doc_id]

向索引中插入一個文檔(document),可通過WITH_ID指定該文檔在索引內的唯一ID(doc_id),若doc_id已存在,則更新並覆蓋原文檔。若不指定WITH_ID(預設),則自動產生doc_id。

TFT.MADDDOC

TFT.MADDDOC index document doc_id [document1 doc_id1] ...

向索引中插入多個文檔(document),每個文檔必須指定文檔ID(doc_id)。若某個文檔寫入失敗(例如寫入的文檔內容與定義的格式不符),則該命令的所有文檔均不會寫入。

TFT.UPDATEDOCFIELD

TFT.UPDATEDOCFIELD index doc_id document

更新索引中doc_id指定的文檔,若更新的欄位為mapping指定的索引欄位時,該欄位更新的內容需與mapping指定的類型一致;若停用字詞段,支援更新任意欄位類型的內容。

說明

若更新的欄位已存在,則更新原文檔,若欄位不存在,則新增該欄位。若指定的文檔不存在,該命令支援自動建立文檔,此時效果等同於TFT.ADDDOC。

TFT.DELDOCFIELD

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

刪除索引中doc_id指定文檔的指定欄位,若該欄位為索引欄位,會同時在索引中刪除該欄位的資訊。

說明

若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

TFT.INCRLONGDOCFIELD

TFT.INCRLONGDOCFIELD index doc_id field increment

向索引中doc_id指定文檔的指定欄位增加整數值(increment),支援指定increment為負數,支援指定的欄位類型為long或int類型。

說明

若指定的文檔不存在,該命令支援自動建立文檔,初始化欄位的值為0,並增加指定的increment。若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

TFT.INCRFLOATDOCFIELD

TFT.INCRFLOATDOCFIELD index doc_id field increment

向索引中doc_id指定文檔的指定欄位增加浮點數值(increment),支援指定increment為負數,支援指定的欄位類型為double類型。

說明

若指定的文檔不存在,該命令支援自動建立文檔,初始化欄位的值為0,並增加指定的increment。若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

TFT.GETDOC

TFT.GETDOC index doc_id

擷取索引中指定doc_id的文檔內容。

TFT.EXISTS

TFT.EXISTS index doc_id

查詢索引中指定doc_id的文檔是否存在。

TFT.DOCNUM

TFT.DOCNUM index

擷取索引中的文檔數量。

TFT.SCANDOCID

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

擷取索引中所有的doc_id。

TFT.DELDOC

TFT.DELDOC index doc_id [doc_id] ...

刪除索引中doc_id指定的文檔,支援指定多個doc_id。

TFT.DELALL

TFT.DELALL index

刪除索引中所有文檔,但不會刪除index。

TFT.ANALYZER

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

查詢分詞器分詞效果。

TFT.SEARCH

TFT.SEARCH index query

根據query語句搜尋索引的文檔,query文法類似ES文法

TFT.MSEARCH

TFT.MSEARCH index_count index [index1] ... query

根據query語句搜尋多個索引的文檔(待查詢索引的mappingssettings的配置必須相同),匯聚多個索引的查詢結果,再次進行打分、排序、彙總並返回。

TFT.EXPLAINCOST

TFT.EXPLAINCOST index query

查詢query語句的執行耗時,返回內容包括查詢過程中涉及到的文檔集合數及各階段的耗時。

TFT.EXPLAINSCORE

TFT.EXPLAINSCORE index query [doc_id] ...

查詢執行query語句的計分詳情資訊,您可以通過該命令瞭解文檔分數的計算過程,並最佳化Search語句,提升文檔的查詢效果。

DEL

DEL key [key ...]

使用原生Redis的DEL命令可以刪除一條或多條TairSearch資料。

表 2. 自動補齊命令

命令

文法

說明

TFT.ADDSUG

TFT.ADDSUG index text weight [text weight] ...

在指定索引中,添加自動補全的文本及對應權重,支援添加多個文本。

TFT.DELSUG

TFT.DELSUG index text [text] ...

在指定索引中,刪除自動補全的文本,支援刪除多個文本。

TFT.SUGNUM

TFT.SUGNUM index

擷取指定索引中自動補全文本的數量。

TFT.GETSUG

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

根據指定首碼,查詢匹配的自動補全文本,將優先返回權重比較高的text。

TFT.GETALLSUGS

TFT.GETALLSUGS index

擷取指定索引的全量自動補全文本。

說明 本文的命令文法定義如下:
  • 大寫關鍵字:命令關鍵字。
  • 斜體:變數。
  • [options]:選擇性參數,不在括弧中的參數為必選。
  • A|B:該組參數互斥,請進行二選一或多選一。
  • ...:前面的內容可重複。

TFT.CREATEINDEX

類別

說明

文法

TFT.CREATEINDEX index mappings settings

命令描述

建立索引(index)並添加映射(mappings),映射文法類似ES文法。在添加索引文檔前,必須先建立索引。

說明

為避免產生大Key,您可以預先將大索引拆分成小索引,並設計負載規則將資料寫入不同的索引中。建立該類索引時,必須使該類索引具備相同的mappings和settings配置,建立後可通過TFT.MSEARCH進行查詢。

選項

  • index:待建立的索引名稱。

  • mappings:映射內容,支援的文法如下。

    • dynamic:映射模式,支援strict(嚴格映射),表示僅能寫入在properties中已設定過的欄位,無法成功寫入未配置過的欄位。若未指定該參數,則預設為非嚴格映射模式,即不會檢查寫入的欄位是否已在properties中設定。

    • enabled:強制檢查寫入文檔的欄位類型與properties中指定的類型是否一致,若不一致則寫入失敗,取值為true(預設,表示會檢查)和false。該參數僅對停用字詞段(index為false)生效,索引欄位會強制檢查欄位類型。

    • _source:設定儲存原始文檔,該參數不會影響對應欄位索引的建立,取值如下。

      enabled:是否儲存原始文檔,取值如下。

      • true(預設):儲存原始文檔,預設儲存所有欄位。

        可指定excludes(不需要儲存的欄位)和includes(需要儲存的欄位),支援配置萬用字元模式(WildCard)的欄位。若某欄位同時出現在excludesincludes時,則excludes的優先順序大於includes,表示該欄位最終不會儲存在原始文檔中,樣本如下。

        樣本一:"_source":{"enabled":true}(預設),表示儲存所有欄位,等同於"_source":{"enabled":true,"excludes":[],"includes":[]}

        樣本二:"_source":{"enabled":true,"excludes":[],"includes":["id","name"]},表示僅儲存“id”、“name”欄位。

      • false:不儲存原始文檔。

    • properties:映射的欄位集合,每個欄位可設定如下屬性。

      • index:是否將該欄位設定為索引欄位,取值如下:

        • true(預設):索引欄位,查詢時僅能通過索引欄位尋找文檔。

          Tair會在記憶體中儲存所有索引欄位的原始文檔,若該欄位在_source中配置不儲存原始文檔,則在查詢時返回的原始文檔中不顯示該欄位。

        • false:停用字詞段。

      • boost:該欄位的計分權重,預設為1,範圍為正浮點數,Tair將自動計算出各個欄位的相對計算分。

      • type:欄位的資料類型,同時支援數群組類型,取值如下。

        說明

        例如keyword的數群組類型為keyword[],其他資料類型類似。樣本為:TFT.CREATEINDEX idx:pro '{"mappings":{"properties":{"f0":{"type":"keyword[]"}}}}'

        • keyword:不可被拆分字串。取值如下:

          • ignore_above:指定keyword的字串長度上限,預設為128,例如"ignore_above":128

          • similarity:相似性演算法,取值為classic(預設,表示使用TF-IDF演算法)、BM25(Okapi BM25演算法),樣本為:TFT.CREATEINDEX idx:pro '{"mappings":{"properties":{"fs0":{"type":"keyword","similarity":"BM25"}}}}',您也可以在settings中自訂BM25演算法的參數。

        • text:字串,且可通過分詞器解析,存入索引。取值如下:

          • analyzer:解析text存入索引的分詞器。

            • 您可直接選擇TairSearch內建分詞器,包含standard(預設)、jieba(推薦的中文分詞,效果比chinese好)、stopIKpatternwhitespacesimplekeywordchinesefrenchdutchrussian等。例如"analyzer":"jieba",表示使用Jieba中文分詞器,更多資訊請參見內建分詞器

            • 您也可以自訂分詞器,例如"analyzer":"my_custom_analyzer",並在settings中的analysis參數中進行具體的分詞器配置。

          • search_analyzer:指定搜尋時使用的分詞器,支援的分詞器類型與analyzer相同,預設為analyzer的設定。

          • similarity:相似性演算法,取值為classic(預設,表示使用TF-IDF演算法)、BM25(Okapi BM25演算法),您也可以在settings中自訂BM25演算法的參數。

        • long:長整型,您可以將時間點轉為Unix時間戳記,存入該資料類型中。

        • integer:整型。

        • double:雙精確度浮點型,但不支援NaN、Inf、-Inf等特殊的資料類型。

  • settings(可選):配置索引設定,支援如下配置項。

    • analysis:自訂分詞器,更多資訊請參見自訂分詞器

    • index:自訂相似性演算法,支援修改Okapi BM25演算法的參數,樣本如下:TFT.CREATEINDEX idx:pro15 '{"mappings":{"properties":{"fs0":{"type":"keyword","similarity":"my_similarity"}}},"settings":{"index":{"similarity":{"my_similarity":{"type":"BM25","k1": 1.0,"b": 1.0}}}}}'。參數說明:

      • k1:詞項在文檔中的出現頻率對得分(分數)的影響,該值越大,出現頻率對於得分影響越大,預設值為1.2,取值範圍需大於0。

      • b:文檔長度對得分(分數)的影響,該值越大,文檔長度對於得分影響越大,預設值為0.75,取值範圍為[0,1]。

    • queries_cache:當您查詢文檔時,TairSearch支援將查詢結果存入緩衝,該緩衝稱為查詢快取,預設最大緩衝為10000條查詢結果(記憶體無限制),達到上限後,將通過LRU演算法(最近最少使用的)逐出查詢結果。您可以通過配置queries_cache,配置查詢快取的最大記憶體和TTL(Time To Live)配置,配置後,查詢快取的最大記憶體將以size為準。取值如下:

      • size:字串類型,表示所有查詢快取的最大記憶體,當達到查詢快取最大記憶體後,也將通過LRU演算法逐出查詢結果。

        該參數的預設單位為位元組,例如"size": "1000"表示最多能儲存1000位元組的查詢快取,同時還支援單位:"kb"、"mb",例如"size": "10kb""size": "1mb"

      • ttl:整型,表示一條查詢快取的到期時間,預設為10s,單位為秒。

      樣本:"settings":{"queries_cache":{"size":"100mb","ttl":3}}

      queries_cache配置項為節點維度參數,在一個索引中配置後,在同進程內的其他索引也會受到影響。因此,建議所有索引都是用相同的queries_cache配置。

    • compress_doc:配置是否啟用文檔透明壓縮功能。開啟該功能會消耗更多的CPU,並增大讀寫時延,因此只建議在索引較大(如KB層級)且優先考慮儲存成本時啟用該功能。取值如下:

      • size:字串類型,表示壓縮的閾值,當索引達到該閾值時,才會被壓縮,預設值為“10kb”。

        該參數的預設單位為位元組,同時還支援單位:"kb"、"mb",例如"size": "1000""size": "10kb""size": "1mb"

      • enable:布爾類型,表示是否啟用文檔壓縮功能,取值為false(預設)和true。

      樣本:"settings":{"compress_doc":{"size":"1kb","enable":true}}

      在通過TFT.UPDATEINDEX命令開啟或關閉壓縮功能後,壓縮功能只對新寫入或更新的文檔生效,不會對已寫入的文檔生效。例如,通過TFT.UPDATEINDEX命令開啟壓縮功能,Tair僅會對之後寫入或更新的文檔進行壓縮,不會對已寫入的文檔進行壓縮操作。

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.CREATEINDEX idx:product '{"mappings":{"_source":{"enabled":true},"properties":{"product_id":{"type":"keyword","ignore_above":128},"product_name":{"type":"text"},"product_title":{"type":"text","analyzer":"jieba"},
"price":{"type":"double"}}}}'

# 建立商品ID(product_id)為keyword資料類型,並設定上限為128個字元。
# 建立商品名稱(product_name)為text資料類型。
# 建立商品標題(product_title)為text資料類型,並設定分詞器為中文。
# 建立價格(price)為double資料類型。

返回樣本:

OK

TFT.UPDATEINDEX

類別

說明

文法

TFT.UPDATEINDEX index mappings settings

命令描述

向指定的索引中新增properties欄位,或修改索引設定。

選項

  • index:待操作的索引名稱。

  • mappings:映射內容,僅輸入新增的properties欄位(無需輸入dynamic_source等資訊),且新增的properties欄位不能與原有欄位衝突,否則會新增失敗。

  • settings:修改索引設定。僅支援修改queries_cachecompress_docindex參數,其中index參數僅支援修改BM25演算法中k1b的值。

說明

mappingssettings的文法請參見TFT.CREATEINDEX

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.UPDATEINDEX idx:product '{"mappings":{"properties":{"product_group":{"type":"text","analyzer":"chinese"}}}}'

返回樣本:

OK

TFT.GETINDEX

類別

說明

文法

TFT.GETINDEX index

命令描述

擷取索引的映射內容。

選項

  • index:待操作的索引名稱。

傳回值

  • 執行成功:返回索引的映射內容,格式為JSON。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.GETINDEX idx:product

返回樣本:

{"idx:product0310":{"mappings":{"_source":{"enabled":true,"excludes":[],"includes":["product_id"]},"dynamic":"false","properties":{"price":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"double"},"product_id":{"boost":1.0,"enabled":true,"ignore_above":128,"index":true,"similarity":"classic","type":"keyword"},"product_name":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"},"product_title":{"analyzer":"chinese","boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"}}}}}

TFT.ADDDOC

類別

說明

文法

TFT.ADDDOC index document [WITH_ID doc_id]

命令描述

向索引中插入一個文檔(document),可通過WITH_ID指定該文檔在索引內的唯一ID(doc_id),若doc_id已存在,則更新並覆蓋原文檔。若不指定WITH_ID(預設),則自動產生doc_id。

選項

  • index:待操作的索引名稱。

  • document:插入的文檔,JSON格式,插入的值需與該欄位定義的資料類型一致。

    說明

    若索引通過_sourceincludes參數配置了僅儲存部分欄位,則在插入或更新文檔時僅儲存includes中配置的欄位。

  • WITH_ID doc_id:是否指定文檔ID,如需指定文檔ID需輸入doc_id值,doc_id的格式為任一字元串。

傳回值

  • 執行成功:返迴文檔ID,格式為JSON。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.ADDDOC idx:product '{"product_id":"product test"}' WITH_ID 00001

返回樣本:

{"id":"00001"}

數組的添加樣本:

TFT.ADDDOC idx:product '{"product_id":["an","2","3df"]}' WITH_ID 00001

TFT.MADDDOC

類別

說明

文法

TFT.MADDDOC index document doc_id [document1 doc_id1] ...

命令描述

向索引中插入多個文檔(document),每個文檔必須指定文檔ID(doc_id)。若某個文檔寫入失敗(例如寫入的文檔內容與定義的格式不符),則該命令的所有文檔均不會寫入。

選項

  • index:待操作的索引名稱。

  • document:插入的文檔,JSON格式,插入的值需與該欄位定義的資料類型一致。

    說明

    若索引通過_sourceincludes參數配置了僅儲存部分欄位,則在插入或更新文檔時僅儲存includes中配置的欄位。

  • doc_id:指定文檔ID,doc_id的格式為任一字元串。

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.MADDDOC idx:product '{"product_id":"test1"}' 00011 '{"product_id":"test2"}' 00012

返回樣本:

OK

TFT.UPDATEDOCFIELD

類別

說明

文法

TFT.UPDATEDOCFIELD index doc_id document

命令描述

更新索引中doc_id指定的文檔,若更新的欄位為mapping指定的索引欄位時,該欄位更新的內容需與mapping指定的類型一致;若停用字詞段,支援更新任意欄位類型的內容。

說明

若更新的欄位已存在,則更新原文檔,若欄位不存在,則新增該欄位。若指定的文檔不存在,該命令支援自動建立文檔,此時效果等同於TFT.ADDDOC。

選項

  • index:待操作的索引名稱。

  • doc_id:指定文檔ID。

  • document:更新的文檔內容,JSON格式。

    說明

    若索引通過_sourceincludes參數配置了僅儲存部分欄位,則在插入或更新文檔時僅儲存includes中配置的欄位。

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.UPDATEDOCFIELD idx:product 00011 '{"product_id":"test8","product_group":"BOOK"}'

返回樣本:

OK

TFT.DELDOCFIELD

類別

說明

文法

TFT.DELDOCFIELD index doc_id field [field1 field2 ...]

命令描述

刪除索引中doc_id指定文檔的指定欄位,若該欄位為索引欄位,會同時在索引中刪除該欄位的資訊。

說明

若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

選項

  • index:待操作的索引名稱。

  • doc_id:指定文檔ID。

  • field:待刪除的欄位。

傳回值

  • 執行成功:返回成功刪除的欄位數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.DELDOCFIELD idx:product 00011 product_group

返回樣本:

(integer) 1

TFT.INCRLONGDOCFIELD

類別

說明

文法

TFT.INCRLONGDOCFIELD index doc_id field increment

命令描述

向索引中doc_id指定文檔的指定欄位增加整數值(increment),支援指定increment為負數,支援指定的欄位類型為long或int類型。

說明

若指定的文檔不存在,該命令支援自動建立文檔,初始化欄位的值為0,並增加指定的increment。若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

選項

  • index:待操作的索引名稱。

  • doc_id:指定文檔ID。

  • field:待操作的欄位,支援的欄位類型為long或int類型,且不支援數群組類型的欄位。

  • increment:待增加操作的值,可以指定該值為負數實現相減,資料類型為整型(int)。

傳回值

  • 執行成功:返回執行操作後欄位的數值。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.INCRLONGDOCFIELD idx:product 00011 stock 100

返回樣本:

(integer)100

TFT.INCRFLOATDOCFIELD

類別

說明

文法

TFT.INCRFLOATDOCFIELD index doc_id field increment

命令描述

向索引中doc_id指定文檔的指定欄位增加浮點數值(increment),支援指定increment為負數,支援指定的欄位類型為double類型。

說明

若指定的文檔不存在,該命令支援自動建立文檔,初始化欄位的值為0,並增加指定的increment。若指定的欄位不存在(例如被_source過濾的欄位),則操作失敗。

選項

  • index:待操作的索引名稱。

  • doc_id:指定文檔ID。

  • field:待操作的欄位,支援的欄位類型double類型,且不支援數群組類型的欄位。

  • increment:待增加操作的值,可以指定該值為負數實現相減,資料類型為雙精確度浮點型(double)。

傳回值

  • 執行成功:返回執行操作後欄位的數值。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6

返回樣本:

"299.6"

TFT.GETDOC

類別

說明

文法

TFT.GETDOC index doc_id

命令描述

擷取索引中指定doc_id的文檔內容。

選項

  • index:待查詢的索引名稱。

  • doc_id:指定文檔ID。

傳回值

  • 執行成功:返迴文檔ID和文檔內容。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.GETDOC idx:product 00011

返回樣本:

{"_id":"00011","_source":{"product_id":"test8"}}

TFT.EXISTS

類別

說明

文法

TFT.EXISTS index doc_id

命令描述

查詢索引中指定doc_id的文檔是否存在。

選項

  • index:待查詢的索引名稱。

  • doc_id:指定文檔ID。

傳回值

  • 執行成功:

    • 若文檔存在,返回1。

    • 若索引或文檔不存在,返回0。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.EXISTS idx:product 00011

返回樣本:

(integer) 1

TFT.DOCNUM

類別

說明

文法

TFT.DOCNUM index

命令描述

擷取索引中的文檔數量。

選項

  • index:待查詢的索引名稱。

傳回值

  • 執行成功:索引的文檔數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.DOCNUM idx:product

返回樣本:

(integer) 3

TFT.SCANDOCID

類別

說明

文法

TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]

命令描述

擷取索引中所有的doc_id。

選項

  • index:待查詢的索引名稱。

  • cursor:指定本次掃描的遊標。

  • MATCH *value*:模式比對,value為待匹配的值,例如MATCH *redis*

  • COUNT count:指定本次掃描的最大數量,預設為100。

傳回值

  • 執行成功:返回一個數組。

    • 第一個元素:下次查詢的cursor,若該key已掃描完成,則返回0。

    • 第二個元素:本次查詢的doc_id。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.SCANDOCID idx:product 0 COUNT 3

返回樣本:

1) "0"
2) 1) "00001"
   2) "00011"
   3) "00012"

TFT.DELDOC

類別

說明

文法

TFT.DELDOC index doc_id [doc_id] ...

命令描述

刪除索引中doc_id指定的文檔,支援指定多個doc_id。

選項

  • index:待查詢的索引名稱。

  • doc_id:指定文檔ID。

傳回值

  • 執行成功:返回成功刪除的文檔數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.DELDOC idx:product 00011 00014

返回樣本:

"1"    # 本樣本中ID"00014"文檔不存在,故僅刪除ID"00011"文檔,返回1。

TFT.DELALL

類別

說明

文法

TFT.DELALL index

命令描述

刪除索引中所有文檔,但不會刪除index。

選項

  • index:待查詢的索引名稱。

  • doc_id:指定文檔ID。

傳回值

  • 執行成功:返回OK。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.DELALL idx:product

返回樣本:

OK

TFT.ANALYZER

類別

說明

文法

TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]

命令描述

查詢分詞器分詞效果。

選項

  • analyzer_name:分詞器名稱,支援內建分詞器和自訂分詞器。

    若指定自訂分詞器或修改了內建分詞器的配置(停用詞或詞典),您還需要指定建立該分詞器的索引名稱(INDEX)。

  • text:待分詞的文檔,utf-8格式。

  • INDEX(可選):分詞器的索引名稱。若指定自訂分詞器或修改了內建分詞器的配置(停用詞或詞典),該參數必選。

  • SHOW_TIME(可選):指定是否返回分詞執行的時間,單位為微秒(us)。

    該時間包含詞庫載入的時間,當第一次載入JiebaAnalyzer、IKAnalyzer等具有較大內建詞庫的分詞器時,耗時可能會達到秒級。

傳回值

  • 執行成功:返回Token資訊,JSON格式。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.ANALYZER standard "Tair is a nosql database"

返回樣本:

'{
    "tokens":[
        {
            "token":"Tair",
            "start_offset":0,
            "end_offset":4,
            "position":0
        },
        {
            "token":"nosql",
            "start_offset":10,
            "end_offset":15,
            "position":3
        },
        {
            "token":"database",
            "start_offset":16,
            "end_offset":24,
            "position":4
        }
    ]
}'

TFT.SEARCH

類別

說明

文法

TFT.SEARCH index query

命令描述

根據query語句搜尋索引的文檔,query文法類似ES文法

選項

index為待查詢的索引名稱;query為類似ES文法的DLS語句,支援如下欄位:

  • query:查詢子句,支援如下文法。

    • match:基礎的匹配查詢,支援如下參數。

      在不需要對文檔進行分詞拆分或模糊比對的情境下,推薦使用termprefix等命令,以提高查詢效率。

      • query:查詢的文檔內容。

        說明
        • 未開啟模糊比對(fuzziness)時,query中的文檔會被指定分詞器(analyzer)拆分成多個詞根,同時您可以指定operator(不同詞根之間的關係)、minimum_should_match(至少需要匹配多少個詞根)參數。

        • 開啟了模糊比對(fuzziness)時,上述參數將無效,您可以指定prefix_length參數。

      • analyzer:指定match查詢語句的分詞器,支援standard(預設,英文分詞器)、chinesearabiccjkczechbraziliangermangreekpersianfrenchdutchrussianjieba(中分分詞),更多資訊請參見Search分詞器

      • minimum_should_match:查詢語句會通過分詞器拆分成多個詞根,您可以通過本參數指定至少需要匹配多少個詞根。該參數在未開啟模糊比對且operator為OR時生效。

      • operator:指定通過分詞器拆分的詞根之間的關係,取值為AND和OR(預設)。例如'{"query":{"match":{"f0":{"query":"redis cluster","operator":"OR"}}}}',表示待搜尋的文檔中包含"redis"或"cluster"即滿足查詢條件。

      • fuzziness:是否開啟模糊比對查詢,預設為關閉,"fuzziness":1為開啟模糊比對,例如'{"query":{"match":{"f0":{"query":"excelentl","fuzziness":1}}}}'

      • prefix_length:設定模糊比對保持不變的起始字元數,預設為0,該參數僅在開啟模糊比對時生效。

    • term:詞根查詢,不會對查詢內容進行拆分,效率比match高,支援查詢所有欄位類型。同時,該查詢方式支援指定lowercase參數,表示是否將待查詢的詞根預先轉換為小寫,取值為true(預設)和false。例如'{"query":{"term":{"f0":{"value":"redis","boost": 2.0}}}}''{"query":{"term":{"f0":"Redis","lowercase":"false"}}}'

      若添加文檔時使用的分詞器不會將文檔轉化為小寫,建議將lowercase參數設定為false,否則可能查不到結果。

    • terms:多詞根查詢,上限為1024個詞根。同時,該查詢方式支援指定lowercase參數,表示是否將待查詢的詞根預先轉換為小寫,取值為true(預設)和false。例如'{"query":{"terms":{"f0":["redis","excellent"]}}}'

      若添加文檔時使用的分詞器不會將文檔轉化為小寫,建議將lowercase參數設定為false,否則可能查不到結果。

    • range:範圍查詢,支援所有欄位類型,取值為lt(小於)、gt(大於)、lte(小於等於)和gte(大於等於),例如'{"query":{"range":{"f0":{"lt":"abcd","gt":"ab"}}}}'

    • wildcard:萬用字元查詢,格式為"wildcard":{"待查詢field":{"value":"查詢內容"}},只支援*?萬用字元,例如'{"query":{"wildcard":{"f0":{"value":"*b?Se"}}}}'

    • prefix:首碼查詢,例如'{"query":{"prefix":{"f0":"abcd"}}',表示查詢f0欄位以abcd為開頭的文檔。

    • bool:複合查詢,上限為1024個詞根,取值如下。

      • must:查詢結果需匹配must列表中所有查詢子句,例如'{"query":{"bool":{"must":[{"match":{"DB":"redis"}},{"match":{"Architectures":"cluster"}}]}}}',表示查詢DB為Redis、架構(Architectures)為cluster的文檔。

      • must_not:查詢結果需不匹配must_not列表中所有查詢子句。

      • should:查詢結果需匹配should列表中任意一個查詢子句(表示或),可指定minimum_should_match參數。

      • minimum_should_match:該參數需搭配should語句使用,表示至少需匹配多少個查詢子句。若bool語句中只有should語句,則該參數預設為1;bool語句中還有mustmust_not語句,則該參數預設為0。例如'{"query":{"bool":{"minimum_should_match":1,"should":[{"match":{"DB":"redis"}},{"match":{"Architectures":"cluster"}}]}}}',表示查詢DB為Redis或架構(Architectures)為cluster的文檔。

      說明

      bool查詢語句中可嵌套任何類型的子查詢語句,例如嵌套bool語句,樣本為TFT.SEARCH idx:product '{"query":{"bool":{"must":[{"term":{"product_name":"apple"}},{"bool":{"minimum_should_match":1,"should":[{"term":{"price":19.5}},{"term":{"product_id":"fruits_2"}}]}}]}}}'

    • dis_max:首選複合查詢,預設返回queries查詢子句中單個query分數最高的結果在首位。

      若指定了tie_breaker參數,將增加匹配多個查詢子句的文檔分數,tie_breaker的取值範圍為[0,1],預設為0。指定tie_breaker後,目的文件分數的計算規則為:query的最高分+((將除最高分以外的query分數相加) * tie_breaker)。例如查詢中有3個子句,tie_breaker為0.5,doc1在每個子句的分數為[5,1,3],最終doc1分數為5+((1+3)*0.5)。

      命令樣本為'{"query":{"dis_max":{"queries":[{"term":{"f0":"redis"}},{"term":{"f1":"database"}},{"match":{"title":"redis memory database"}}],"tie_breaker": 0.5}}}'

    • constant_score:固定分數的複合查詢,通過filter查詢並返回任意一個符合的文檔,支援設定權重(boost,double類型,預設為1.0),文檔將以指定的boost返回。例如'{"query":{"constant_score":{"filter":{"term":{"f0":"abc"}},"boost":1.2}}}'

    • match_all:查詢全部文檔,支援設定權重(boost,double類型,預設為1.0),可以將指定的分數賦予所有返回的文檔,例如'{"query":{"match_all":{"boost":2.3}}}'

    說明

    通過booldis_maxconstant_score進行複合查詢時,可對termtermsrangewildcard設定權重(boost,預設為1),區分多個條件的權重,例如'{"query":{"bool":{"must":[{"match":{"f0":"v0"}},"term":{"f0":{"value":"redis","boost":2}}]}}}'

  • sort:結果排序,但不支援指定數群組類型的欄位,取值如下。

    • _score(預設):按計分權重降序,樣本為"sort":"_score"

    • _doc:按文檔ID升序,樣本為"sort":"_doc"

    • 指定欄位:按指定欄位升序,該欄位必須為索引(index為true)欄位或開啟強制類型檢查(enabled為true)的欄位,同時僅支援指定欄位類型為:keyword、long、integer、double。例如"sort":"price",表示指定以price欄位升序排序。

    支援輸入一個數組進行多條件排序,將按照數組內的順序進行排序,可通過order調整預設順序,取值為desc(降序)和acs(升序)。例如'{"sort":[{"price":{"order":"desc"}},{"_doc":{"order":"desc"}}]}',表示優先根據price排序,在price相同時根據_doc排序。

  • _source:指定查詢結果中的欄位,可指定includes(需要展示的field)和excludes(不需要展示的field),支援配置萬用字元模式(WildCard)的field。例如"_source":{"includes":["f0"],表示查詢結果僅返回f0欄位。

  • aggs:對query查詢子句的結果進行彙總。若欄位為數群組類型,則僅支援Terms Aggregation。文法與樣本請參見Aggregations介紹

  • track_total_hits:通過termtermsmatch(不開啟模糊比對)語句查詢(含複合查詢)時,是否查詢所有文檔。取值如下:

    • false(預設):僅查詢score排名前100的文檔。

    • true:查詢所有文檔。

      警告

      開啟後,若命中的文檔數過多會導致慢查詢,請謹慎使用。

  • from:指定開始返回的目的文件起點,預設為0,表示從第一個查到的文檔開始返回。

  • size:返回查詢的文檔數量,預設為10,取值範圍為[0,10000]。size為0表示結果集中不返回具體的文檔, 只返回命中查詢的總文檔數量(total)。

    說明

    可通過fromsize參數到達分頁的效果,但分頁越多越影響效能。

傳回值

  • 執行成功:返回查詢到的文檔資訊。

    說明

    返回參數中的relation為查詢到的文檔數量,取值:eq(表示查詢到的文檔數量等於value值)、gte(表示大於或等於value值),樣本如下。

    {
        "hits": {
            "hits": [],
            "max_score": null,
            "total": {
                "relation": "gte",
                "value": 100
            }
        }
    }
  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.SEARCH idx:product '{"sort":[{"price":{"order":"desc"}}]}'

返回樣本:

{"hits":{"hits":[{"_id":"fruits_3","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_3","product_name":"orange","price":30.2,"stock":3000}},{"_id":"fruits_2","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_2","product_name":"banana","price":24.0,"stock":2000}},{"_id":"fruits_1","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_1","product_name":"apple","price":19.5,"stock":1000}}],"max_score":1.0,"total":{"relation":"eq","value":3}}}

TFT.MSEARCH

類別

說明

文法

TFT.MSEARCH index_count index [index1] ... query

命令描述

根據query語句搜尋多個索引的文檔(待查詢索引的mappingssettings的配置必須相同),匯聚多個索引的查詢結果,再次進行打分、排序、彙總並返回。

說明

TFT.MSEARCH命令返回的結果是對多個索引的查詢結果再次進行打分、排序、彙總的結果,該結果不等同於對多個索引的資料集合直接進行打分、排序、彙總等結果。TFT.MSEARCH的策略如下:

  • 打分和排序:對子結果集再進行打分、排序。

  • 彙總:

    • Sum、max、min、avg、value_count:對子結果集再進行同等屬性的彙總運算。

    • Sum_of_squares、variance、std_deviation:對子結果集進行取均值運算。

    • Terms Aggregation和Filter Aggregation:對子結果集再進行統計彙總運算。

選項

  • index_cout:待查詢的索引數量,取值範圍為[1,100]。

  • index:待查詢的索引名稱。查詢多個索引時,待查詢索引的mappingssettings的配置必須相同,若各索引的mappings配置不一致或索引不存在均會報錯。

  • query:彙總查詢語句,支援如下參數:

    • query:查詢子句。

    • sort:結果排序,但不支援指定數群組類型的欄位。

    • _source:指定查詢結果中的欄位。

    • aggs:對query查詢子句的結果進行彙總。若欄位為數群組類型,則僅支援Terms Aggregation。

    • track_total_hits:通過term、terms、match(不開啟模糊比對)語句查詢(含複合查詢)時,是否查詢所有文檔。

    • size:指定查詢返回的文檔數量。

      可通過sizereply_with_keys_cursorkeys_cursor參數實現分頁查詢。若keys_cursor為0(預設情況下),Tair會在各索引的查詢結果中,從排序最高的文檔(第一位)開始,擷取指定數量的文檔;若keys_cursor不為0,則從指定位置開始擷取指定數量的文檔,再將多個索引的查詢結果匯聚在一起,進行打分、排序、彙總,並輸出最終文檔。

      例如單次查詢3個索引(key0、key1、key2),設定size為10:

      • 首次搜尋,可設定keys_cursor為0:Tair會從3個索引中各搜尋出排序靠前的10個文檔(此時共有30個候選文檔),然後匯聚、打分、排序、彙總等,輸出整體排名靠前的10個文檔。返回的keys_cursor樣本為{"keys_cursor":{"key0":2,"key1":5,"key2":3}}

      • 第二次查詢時,可使用同樣的查詢語句,並加上{"keys_cursor":{"key0":2,"key1":5,"key2":3}}Tair會在各個索引中,從指定的位置開始再擷取10個文檔(例如key0從第3位開始向後擷取10個文檔,key1與key2也類似,此時仍有30個候選文檔),再將多個索引的查詢結果匯聚在一起,進行打分、排序、彙總,並輸出最終文檔。

    • reply_with_keys_cursor:指定是否返回每個索引下一輪查詢的遊標資訊,取值:true、false(預設)。

    • keys_cursor:指定本次查詢的各索引的遊標,可以將上輪查詢返回的keys_cursor作為本次查詢的輸入,實現分頁查詢。預設為0,表示第一位。

說明

相比較TFT.SEARCH的query語句,TFT.MSEARCH的query不支援from參數,但可以通過sizereply_with_keys_cursorkeys_cursor參數實現分頁查詢,其餘參數文法均可參見TFT.SEARCH

傳回值

  • 執行成功:返回查詢到的文檔資訊,與TFT.SEARCH的返回結果類似,同時還會返回aux_info

    aux_info欄位中包含:索引mappingssettings的CRC-64值(業務請求可忽略該值)、keys_cursor值(可選,下次各索引開始查詢的遊標位置)、field_type值(欄位的資料類型,僅在根據索引欄位排序時返回),aux_info樣本如下:

    {
        "aux_info":{
            "index_crc64":15096806844241479487,
            "keys_cursor":{
                "key0":2,
                "key1":5,
                "key2":3
            },
            "field_type":{
                "f0":"long"
            }
        }
    }
  • 其他情況返回相應的異常資訊。

樣本

提前執行如下命令:

TFT.CREATEINDEX key0 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key1 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key2 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.ADDDOC key0 '{"f0":120}'
TFT.ADDDOC key0 '{"f0":130}'
TFT.ADDDOC key1 '{"f0":140}'
TFT.ADDDOC key1 '{"f0":150}'
TFT.ADDDOC key2 '{"f0":160}'
TFT.ADDDOC key2 '{"f0":170}'

命令樣本:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true}'

返回樣本:

{"hits":{"hits":[{"_id":"16625439765504840","_index":"key2","_score":1.0,"_source":{"f0":170}},{"_id":"16625439741096630","_index":"key2","_score":1.0,"_source":{"f0":160}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":0,"key2":2}}}

第二頁查詢命令樣本:

TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true,"keys_cursor":{"key0":0,"key1":0,"key2":2}}'
# 查詢語句與第一次查詢相同,但需要增加上輪查詢返回的keys_cursor資訊。

返回樣本:

{"hits":{"hits":[{"_id":"16625439652681160","_index":"key1","_score":1.0,"_source":{"f0":150}},{"_id":"16625439624704580","_index":"key1","_score":1.0,"_source":{"f0":140}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":2,"key2":2}}}

TFT.EXPLAINCOST

類別

說明

文法

TFT.EXPLAINCOST index query

命令描述

查詢query語句的執行耗時,返回內容包括查詢過程中涉及到的文檔集合數及各階段的耗時。

選項

  • index:待查詢的索引名稱。

  • query:查詢語句,文法與TFT.SEARCH相同。

傳回值

  • 執行成功:返回查詢耗時資訊,JSON格式,整體耗時由如下三部分組成。

    • QUERY_COST:query查詢耗時,單位為微秒(time_cost_us)。同時還包含查詢檢視資訊(query)和query對應的文檔集合數(doc_num)。若涉及bool查詢方法會展示bool查詢過程的步驟耗時(steps)。

    • AGGS_COST:查詢過程中彙總(Aggregations)的耗時,單位為微秒(time_cost_us),若查詢語句中沒有指定彙總查詢,則無該耗時。

    • COLLECTOR_COST:查詢結果採集、排序的耗時,單位為微秒(time_cost_us),同時還包含排序類型(collector_type),傳回值為sort排序(ScoreCollector)和分數排序(CustomSortCollector)。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.EXPLAINCOST idx:product '{"sort":[{"price":{"order":"desc"}}]}'

返回樣本:

{
    "QUERY_COST": {
        "query": "MATCHALL_QUERY",
        "doc_num": 1,
        "time_cost_us": 2
    },
    "COLLECTOR_COST": {
        "collector_type": "CustomSortCollector",
        "time_cost_us": 20
    }
}

TFT.EXPLAINSCORE

類別

說明

文法

TFT.EXPLAINSCORE index query [doc_id] ...

命令描述

查詢執行query語句的計分詳情資訊,您可以通過該命令瞭解文檔分數的計算過程,並最佳化Search語句,提升文檔的查詢效果。

該命令當前僅記憶體型(相容Redis 6.0)支援。

選項

  • index:待查詢的索引名稱。

  • query:查詢語句,文法與TFT.SEARCH相同。

  • doc_id:指定文檔ID,若指定了該參數,返回結果只會包含doc_id對應的文檔。

傳回值

  • 執行成功:返回查詢到的文檔資訊,在TFT.SERACH返回結果的基礎上增加每個文檔的計分詳情資訊(_explanation),_explanation中存在如下欄位。

    • score:該文檔的得分。

    • description:score計算使用的公式。

    • field:該文檔被query中指定的field所命中。

    • term:該文檔被query中指定的詞項所命中。

    • query_boost:該文檔在本次查詢中的計分權重。

    • details:文檔的中繼資料與計分過程。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.EXPLAINSCORE today_shares '{"query":{"wildcard":{"shares_name":{"value":"*BY"}}}}'

返回樣本:

{
    "hits": {
        "hits": [
            {
                "_id": "17036492095306830",
                "_index": "today_shares",
                "_score": 1.0,
                "_source": {
                    "shares_name": "YBY",
                    "logictime": 14300410,
                    "purchase_type": 1,
                    "purchase_price": 11.1,
                    "purchase_count": 100,
                    "investor": "Mila"
                },
                "_explanation": {
                    "score": 1.0,
                    "description": "score, computed as query_boost",
                    "field": "shares_name",
                    "term": "*BY",
                    "query_boost": 1.0
                }
            }
        ],
        "max_score": 1.0,
        "total": {
            "relation": "eq",
            "value": 1
        }
    }
}

TFT.ADDSUG

類別

說明

文法

TFT.ADDSUG index text weight [text weight] ...

命令描述

在指定索引中,添加自動補全的文本及對應權重,支援添加多個文本。

選項

  • index:待操作的索引名稱。

  • text:自動補全文本。

  • weight:對應文本的計分權重,範圍為正整數。

傳回值

  • 執行成功:返回成功添加的文檔數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.ADDSUG idx:redis 'redis is a memory database' 3 'redis cluster' 10

返回樣本:

(integer) 2

TFT.DELSUG

類別

說明

文法

TFT.DELSUG index text [text] ...

命令描述

在指定索引中,刪除自動補全的文本,支援刪除多個文本。

選項

  • index:待查詢的索引名稱。

  • text:待刪除的文本,需指定完整、正確的文本。

傳回值

  • 執行成功:返回成功刪除的文本數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.DELSUG idx:redis 'redis is a memory database' 'redis cluster' 

返回樣本:

(integer) 2

TFT.SUGNUM

類別

說明

文法

TFT.SUGNUM index

命令描述

擷取指定索引中自動補全文本的數量。

選項

  • index:待查詢的索引名稱。

傳回值

  • 執行成功:返回索引中的文本數量。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.SUGNUM idx:redis

返回樣本:

(integer) 3

TFT.GETSUG

類別

說明

文法

TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]

命令描述

根據指定首碼,查詢匹配的自動補全文本,將優先返回權重比較高的text。

選項

  • index:待查詢的索引名稱。

  • prefix:指定的查詢首碼。

  • MAX_COUNT count:配置返迴文本的最大數量,count的取值範圍為[0,255]。

  • FUZZY:是否啟用模糊比對。

傳回值

  • 執行成功:返回自動補全文本的列表。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY

返回樣本:

1) "redis cluster"
2) "redis lock"

TFT.GETALLSUGS

類別

說明

文法

TFT.GETALLSUGS index

命令描述

擷取指定索引的全量自動補全文本。

選項

  • index:待查詢的索引名稱。

傳回值

  • 執行成功:返回自動補全文本的列表。

  • 其他情況返回相應的異常資訊。

樣本

命令樣本:

TFT.GETALLSUGS idx:redis

返回樣本:

1) "redis cluster"
2) "redis lock"
3) "redis is a memory database"

Aggregations介紹

您可以在TFT.SEARCH請求中添加aggs(或aggregations)子句,對query查詢子句的結果進行彙總。

用法

通常情況下,在aggs子句中,您需要自訂彙總名稱,並指定彙總類型與彙總欄位(field),僅支援彙總數實值型別與keyword類型的欄位,例如:

TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
# 自訂彙總名稱為Jay_Sum、彙總類型為sum(求和)、彙總欄位為purchase_price。

返回結果包含query的查詢結果和aggs的彙總結果:

{"hits":{"hits":[{"_id":"16581351808123930","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}},{"_id":"16581351809626430","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}}],"max_score":1.0,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}
說明

您可以在查詢語句中加上"size":0,將僅返回aggs的結果。

aggs彙總類型

aggs支援Metric Aggregation、Terms Aggregation、Filter Aggregation功能。

類別

說明

Metric(指標) Aggregation

一般是對數實值型別(例如integer、double等)欄位進行數值計算或統計,不支援嵌套子彙總。支援如下指標:

  • sum:求和。

  • max:最大值。

  • min:最小值。

  • avg:平均值。

  • sum_of_squares:平方和。

  • variance:方差。

  • std_deviation:標準差。

  • value_count:統計value個數,不進行去重,支援數實值型別與keyword類型欄位。

  • extended_stats:進行上述所有指標的計算,一次性返回各類結果。

說明

value_count外,其餘指標均只支援數實值型別欄位。

返回結果:指定欄位進行計算後的值,類型均為double。

Terms Aggregation

統計value的去重個數,僅支援keyword類型欄位,支援嵌套子彙總,參數說明如下:

  • terms

    • field:彙總欄位,僅支援keyword類型欄位。

    • size:返回查詢結果的數量,預設為10,取值範圍為[1,65536)。

    • order:返回object的定序,取值如下:

      • _count(預設):按結果數量排序,取值為desc(降序,預設)和asc(升序),樣本為"order":{"_count":"desc"}

      • _key:按目標欄位的字元排序,取值為desc(降序)和asc(升序),樣本為"order":{"_key":"desc"}

    • min_doc_count:最小文檔數,預設為1,查詢結果的文檔數若小於該數量將不顯示。

    • include:指定value需包含或匹配的字串,當目標欄位為String類型時,支援正則匹配;當目標欄位為數組時,需完全符合字串。

    • exclude:指定value不能包含或匹配的字串,目標欄位的類型要求與include相同,若同時存在includeexclude,將先檢查include再檢查exclude

部分請求樣本:

{
  "aggs": {
    "Per_Investor_Freq":{
      "terms": {
        "field": "investor"
      }
    }
  }
}

返回結果:彙總名稱為key,類型為Object的JSON內容。Object中以buckets為數組key,數組中的value為對應key和doc_count統計結果。樣本如下:

{
  "aggregations": {
    "Per_Investor_Freq": {
      "buckets": [
        {
          "doc_count": 2,
          "key": "Jay"
        },
        {
          "doc_count": 1,
          "key": "Mila"
        }
      ]
    }
  }
 }

Filter Aggregation

filter中可輸入query語句,對query查詢結果進行再次過濾,支援嵌套子彙總。

返回結果:符合過濾條件的文檔個數(doc_count)。

Aggregations查詢樣本

  1. 建立索引。

    TFT.CREATEINDEX today_shares '{"mappings":{"properties":{"shares_name":{"type":"keyword"},"logictime":{"type":"long"},"purchase_type":{"type":"integer"},"purchase_price":{"type":"double"},"purchase_count":{"type":"long"},"investor":{"type":"keyword"}}}}'
    # 建立今日股票交易量索引
    # shares_name:股票名稱
    # logictime:成交時間點
    # purchase_type:購買類型
    # purchase_price:成交價格
    # purchase_count:成交數
    # investor:投資者ID

    預計輸出:

    OK
  2. 添加文檔資料。

    依次執行如下命令。

    TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300210, "purchase_type":1,"purchase_price":101.1, "purchase_count":100,"investor":"Jay"}'
    TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300310, "purchase_type":1,"purchase_price":111.1, "purchase_count":100,"investor":"Jay"}'
    TFT.ADDDOC today_shares '{"shares_name":"YBY","logictime":14300410, "purchase_type":1,"purchase_price":11.1, "purchase_count":100,"investor":"Mila"}'

    預計輸出:

    OK
  3. 進行查詢。

    查詢樣本如下:

    sum

    # 查詢Jay購買股票的總金額。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}

    max

    # 查詢Jay購買單只股票的最大金額。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}

    avg

    # 查詢Jay購買不同股票的平均金額。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}

    std_deviation

    # 查詢Jay購買股票金額的標準差。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}

    extended_stats

    # 查詢Jay購買股票的整體行情(各指標值)。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Extended_Stats":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}

    terms

    # 統計交易2筆以上的投資者。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"investor","min_doc_count":2,"order": {"_key":"desc"}}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}

    terms嵌套

    # 統計各股票的交易記錄總數以及每種股票的平均成交額,但不包含“XAX”股票。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"shares_name","include":"[A-Z]+","exclude":["XAX"]},"aggs":{"Price_Avg":{"avg":{"field":"purchase_price"}}}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"YBY","doc_count":1,"Price_Avg":{"value":11.1}}]}}}

    filter嵌套

    # 統計Jay購買股票的數量與整體行情(各指標值)。
    TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}}, "aggs":{"Jay_BuyIn_Filter": {"filter": {"term":{"investor": "Jay"}},"aggs":{"Jay_BuyIn_Quatation":{"extended_stats":{"field":"purchase_price"}}}}}}'
    
    # 預期輸出:
    {"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Jay_BuyIn_Filter":{"doc_count":2,"Jay_BuyIn_Quatation":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}}