我想使用在多个字段上使用的(Python)字符串列表(值的数量可变)来过滤带有ReQL的表,即,在列表中包含更多字符串的逻辑中,更准确的结果。理想情况下,过滤应区分大小写。
SQL等效项可能接近:
selection = list(r.table("mytable").filter(lambda d:
r.expr(searchWords).contains(d["field"])
).run(g.rdb_conn))
我测试了很多解决方案均未成功,例如,一个描述为here的解决方案:
{{1}}
但是返回0个文档(?)。
答案 0 :(得分:0)
回答我自己的问题。对于那些可能感兴趣的人,我终于通过以下方法解决方法:
迭代输入字符串的所有搜索词
使用:
selectionDict = list(r.table('mytable').filter( \
( r.row["field1"].match("(?i)"+searchWord)) \
| (r.row["field2"]["body"].match("(?i)"+searchWord) ) ) \
.pluck("id") \
.run(g.rdb_conn))
为每个带有“权重”作为值的DocID(键)构建字典。在为DocID找到的每个单词上,“权重”值增加1。
在所有DocID上进行一次迭代后,与返回的单词数量相关的“权重”相同,这意味着它们匹配所有搜索单词。例如,如果字符串为3个单词,则所有DocID的“权重”(最后为3)都将变为3。
get_all
来检索并返回它们。
请注意,搜索在多个字段上不区分大小写,并且可以按我最初的意愿使用部分单词。 可能不是最好和最简洁的方法,但至少可以在不太大的数据库上使用。