创建RethinkDB索引时重新格式化索引字段的字符串

时间:2018-01-29 05:16:06

标签: python rethinkdb rethinkdb-python

我正在尝试在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?

2 个答案:

答案 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的匿名函数。