一种可以嵌入ruby的简单过滤语言



我有一个ruby项目,其中的一部分操作是在给定用户指定约束的情况下选择实体。到目前为止,我已经破解了自己的过滤语言,使用正则表达式并根据实体中的字段指定包含/排除。

如果你对我目前的方法感兴趣,这里有一个例子:例如,给定以下实体列表:

[{"type":"dog", "name":"joe"}, {"type":"dog", "name":"fuzz"}, {"type":"cat", "name":"meow"}]

用户可以指定这样的过滤器:

{"filter":{ "type":{"included":["dog"] }, "name":{"excluded":["^f.*"] } }}

将匹配所有狗,但不包括绒毛。

这现在有点奏效了。然而,我开始需要更复杂的选择参数。我在想,与其继续破解我自己的过滤语言,不如在我的应用程序中嵌入一种更通用的过滤语言?例如,是否有一个解析器可以使用SQLwhere子句进行应用内过滤?或者还有其他一些我不知道的通用、简单的过滤语言吗?我特别想放弃regexp,因为我想对数字进行范围查询(比如entity["size"]<50?)

这有点外推,但我认为您可能正在寻找一个搜索引擎,或者至少有足够的搜索引擎,您还可以将其仅用于查询语言。

如果是这样的话,你可能想看看弹性搜索,它确实有Ruby客户端绑定,可能非常适合你正在尝试做的事情。特别是如果你想或需要将你想要搜索的数据表示为JSON供客户端代码使用,因为搜索引擎本机支持这种格式。

查询语言很有表现力,有各种内置和插件工具可供探索和使用

最后,我实现了一个ruby dsl。它简单、有趣、强大。

最新更新