是否可以使用Cloudant Query / CouchDB 2.0 Find来设置$ regex标志?
具体来说,我想要一个不区分大小写的搜索,全局也很有用。
在JavaScript中我会这样做:
db.find({
selector: {
_id: {$gt: null},
series: {$regex: /mario/i}
}
});
但我不知道如何将其编码为Erlang字符串。
答案 0 :(得分:7)
来自Cloudant支持:
我们了解您希望在Cloudant查询中使用 $ regex 运算符进行不区分大小写的匹配。
例如,您可以使用此Cloudant查询选择器来获取“series”字段具有字符串值的所有文档,其中字符串值与字符串“mario”不区分大小写:
{
"selector": {
"_id": {
"$gt": null
},
"series": {
"$regex": "(?i)mario"
}
}
}
在名为query.txt的文件中使用该选择器,并为$ ACCOUNTNAME,$ DATABASE,$ USERNAME和$ PASSWORD设置适当的值,您可以运行此查询以获得正确的结果:
curl -X POST http://$ACCOUNTNAME.cloudant.com/$DATABASE/_find -H
"Content-Type: application/json" -d @query.txt -u $USERNAME:$PASSWORD
位于https://docs.cloudant.com/cloudant_query.html#creating-selector-expressions的Cloudant API参考说明了Cloudant查询选择器中的$ regex运算符:
大多数选择器表达式的工作方式完全符合您的预期 给定的运营商$ regex运算符使用的匹配算法 目前基于Perl兼容正则表达式(PCRE) 图书馆。但是,并非所有PCRE库都已实现,并且 $ regex运算符的某些部分超出了PCRE提供的范围。对于 有关实施内容的更多信息,请参阅Erlang Regular 表达信息http://erlang.org/doc/man/re.html。
在它所指的http://erlang.org/doc/man/re.html引用的Erlang正则表达式信息中 在以下选项列表中:compile(Regexp,Options) - > {ok,MP} | {error,ErrSpec}
<强>无壳强>
模式中的字母匹配大写和小写字母。
它相当于Perl的/ i选项,可以通过(?i)选项设置在模式中更改。
大写和小写字母的定义与ISO-8859-1字符集相同。
我希望这会有所帮助。
答案 1 :(得分:0)
使用Erlang正则表达式进行couchdb字符串匹配 例如: {“selector”:{“_ id”:{“$ regex”:“sre +”},“doctype”:“user”},“fields”:[“_ id”],“sort”:[{“_ id”: “ASC”}]}