如何使用RediSearch和RedisJSON根据条件(比较操作符)查询文档?

t5zmwmid  于 2023-01-08  发布在  Redis
关注(0)|答案(1)|浏览(147)

我使用RedisJSON将以下数据存储为json,并希望使用RediSearch基于输入条件查询特定的行集。
Ex数据:

{
    "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.开始”小于输入值的记录,所以它应该从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”改为数字值,如“11/12/2011”,比较是否有效。

lyr7nygr

lyr7nygr1#

首先需要创建一个索引@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\"}]"

相关问题