簡體   English   中英

如何使用 RediSearch 和 RedisJSON 根據條件(比較運算符)查詢文檔?

[英]How to use RediSearch and RedisJSON to query documents based on a condition (comparison operators)?

我使用 RedisJSON 將以下數據存儲為 json,我想使用 RediSearch 根據輸入條件查詢一組特定的行。

防爆數據:

{
    "Ticker": "AAPL",
    "Name": "Apple Inc.",
    "returns": [
        { "Range": { "Begin": "9/6/2014", "End": "4/5/2020"}, "Value": "0.0231"},
        { "Range": { "Begin": "11/12/2011", "End": "14/9/2021"}, "Value": "1.455"},
        { "Range": { "Begin": "1/2/2016", "End": "25/7/2022"}, "Value": "0.436"},
        { "Range": { "Begin": "24/6/2012", "End": "18/5/2016"}, "Value": "2.756"},
        { "Range": { "Begin": "14/8/2017", "End": "8/7/2020"}, "Value": "0.945"},
        { "Range": { "Begin": "9/12/2019", "End": "22/10/2015"}, "Value": "4.256"},
    ]
}

例如,如果給定的輸入是“1/1/2015”,那么我只想獲取“Range.Begin”小於輸入值的記錄。 因此它應該返回 json 文檔中的以下行。

{ "Range": { "Begin": "9/6/2014", "End": "4/5/2020"}, "Value": "0.0231"},
{ "Range": { "Begin": "11/12/2011", "End": "14/9/2021"}, "Value": "1.455"},
{ "Range": { "Begin": "24/6/2012", "End": "18/5/2016"}, "Value": "2.756"}

我如何使用 RediSearch 創建具有此類要求的索引?

注意:json 中存儲的所有值都是字符串。 在這種情況下,可能無法對字符串進行比較。 因此,如果日期從“11/12/2011”更改為“11122011”等數值,請告訴我比較是否有效。

首先,您需要創建一個索引@Begin的索引。

例如

 FT.CREATE myidx ON JSON PREFIX 1 ticker: SCHEMA $.Ticker.returns[*].Range.Begin AS begin TEXT

然后您可以在您的查詢中使用此索引,並僅對相關部分進行最后的項目。

例如

> ft.search myidx '@begin:24/6/2012' RETURN 3 "$.returns[?(@.Range.Begin=='24/6/2012')]" as d DIALECT 3
1) (integer) 1
2) "ticker:apple"
3) 1) "d"
   2) "[{\"Range\":{\"Begin\":\"24/6/2012\",\"End\":\"18/5/2016\"},\"Value\":\"2.756\"}]"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM