我正在尝试在RethinkDB中创建索引。 文件如下:
{ "pinyin" : "a1 ai3"}
为了使搜索更容易,我想预处理索引条目并删除空格和数字,因此条目应该只是" aai"在这种情况下。我尝试的是以下各种变体:
r.index_create('pinyin', lambda doc: doc['pinyin'].replace("1", "")).run()
这是一个最简单的构建案例,但即使在这里我也会收到错误
Expected 2 arguments but found 3 in:
r.table('collection').index_create('pinyin', lambda var_7: var_7['pinyin'].replace('1', ''))
很明显,我不明白发生了什么。有人可以帮忙吗?我收集lambda表达式必须遵循python语法,但因为它将在服务器上使用必须是JavaScript?
答案 0 :(得分:0)
我没有使用rethinkdb的经验。但是,如果您想从字符串值中删除所有数字和空格,则下面的代码段可能有所帮助。
import re
doc = { "pinyin" : "a1 ai3"}
removeIntSpace = lambda doc: re.sub("\d", "x", doc['pinyin'].replace(" ", ""))
print removeIntSpace(doc)
#r.index_create('pinyin', removeIntSpace(doc)).run()
<强>输出:强>
axaix
答案 1 :(得分:0)
好的,我想出来了,并在这里张贴给可能遇到同样问题的其他人。这是在rethinkdb管理控制台的数据资源管理器中创建索引的方法:
r.db("dics").table("collection").indexCreate('pinyin', r.row("pinyin").split("").filter(function(char) { return r.expr(["1", "2", "3", "4", " "]).contains(char).not(); }).reduce(function(a, b) { return a.add(b); }))
相应的python版本将在过滤器部分中使用带有lambda的匿名函数。