首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReQL :从Python字符串列表中过滤文档

ReQL :从Python字符串列表中过滤文档
EN

Stack Overflow用户
提问于 2019-03-24 07:40:25
回答 1查看 188关注 0票数 0

我想用ReQL过滤一个表,使用一个(Python)字符串列表(可变值的数量)应用于几个字段,即在列表中字符串越多的逻辑中,结果越准确。理想情况下,过滤应该是案例激励性的。

SQL等效项可能类似于:

代码语言:javascript
复制
select * from mytable
where (field1 like '%AA%' and field1 like '%BB%'...)
or    (field2 like '%AA%' and field2 like '%BB%'...)
or    (field3 like '%AA%' and field3 like '%BB%'...)
...

我测试了很多解决方案,但都没有成功,intance描述了here

代码语言:javascript
复制
selection = list(r.table("mytable").filter(lambda d: 
       r.expr(searchWords).contains(d["field"]) 
).run(g.rdb_conn))

但返回0 doc (?)。

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 04:50:39

回答我自己的问题。对于那些可能感兴趣的人,我最终通过以下方式解决了这个问题:

在输入string

  • Searching的所有搜索词上迭代
  1. ,并使用以下命令获取匹配每个词的所有DocID :

代码语言:javascript
复制
    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))

  1. 使用“DocID”作为值为每个键(key)创建一个字典。
  2. 一旦迭代结束,所有的DocID都会获得与要返回的相关单词数量相同的“权重”,这意味着它们匹配所有的搜索词。例如,对于3个单词的字符串,所有DocID都得到3作为“权重”(在最后),这意味着已经找到了them.
  3. get_all的所有单词,然后使用DocID来检索和返回它们。

注意,搜索是不区分大小写的,在多个字段上,可以使用我最初想要的部分单词。这可能不是最好、最干净的方法,但至少适用于不太大的数据库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55319399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档