仅将文档与一个索引相关联(重新搜索)

Associate a document with one index only (Redisearch)

我在单个Redisearch上使用多个索引,每个索引在代码中与一个class相关联。 例如,XYZ ( List<XYZ> ) 的数据通过索引 XYZ 保存,而 ABC (List<ABC>) 的数据通过 ABC.

问题是,当我使用索引 XYZ 搜索 XYZ 的数据时,ABC 的数据也出现在搜索中。 这可以像这样轻松地重新创建:

//declare three indexes. Some of them contain duplicate field names but this is to be expected (in real life we would have things like timestamps that spread across indexes)

ft.create sample1 schema sampletext text 
ft.create sample2 schema sampleinteger numeric sortable
ft.create sample3 schema sampletext text sampleinteger numeric

//then we add a text under sample1
ft.add sample1 sample1doc 1.0 fields sampletext "hello this document is under an index called sample1"



//then display all the documents associated with the index sample3
ft.search "sample3" "*"  
//-> prints the document above "hello this document is under..."

//display all the documents associated with the index sample2
ft.search "sample2" "*"  
//-> the same result

这是为什么?对此有什么好的解决方法吗?

我知道 FT.ADD 现在已被弃用,但 C# 库仍然在内部调用 FT.ADD 所以我需要让它与 FT.ADD 一起工作,加上我们刚刚添加的文档只包含“ sampletext" 所以它仍然不应该出现在 sample2 下。

RediSearch 2.0 在通过 HSET 命令加载时在后台索引哈希。即使 FT.ADD 命令,如您所说,已被弃用,也会检查输入并将其转换为 HSET 命令。 使用 FT.CREATE 创建索引时,您可以为文档指定前缀或使用过滤器。

如果可能,您应该使用前缀,因为它的性能更高,您的命令类似于 -

ft.create sample1 prefix 1 txt: schema sampletext text
ft.create sample2 prefix 1 num: schema sampleinteger numeric sortable
hset txt:sample1doc sampletext "hello this document is under an index called sample1"

您将收到-

ft.search sample1 *
1) (integer) 1
2) "txt:sample1doc"
3) 1) "sampletext"
   2) "hello this document is under an index called sample1"
ft.search sample2 *
1) (integer) 0

干杯