我有一个Rails应用程序,我希望用户能够从类别列表中创建自定义布尔组合,这些组合本身是动态加载的。例如,如果我有类别foo
bar
和baz
,我希望用户能够选择(foo AND bar) OR baz
或foo OR baz
或任何其他逻辑这些类别的组合。我预期的最常见的用例类似于(a OR b OR c) AND (d OR e OR f) AND (g OR h)
;也就是说,是几个分离的结合。
然后将结果存储在某些数据结构中,以后可以将其用作过滤器。理想情况下,这将通过图形界面完成,而不是让用户在文本中构造布尔逻辑。
在我尝试自己实现之前,是否有一个我可以提供的库已经实现了这个或类似的东西?或者开源的东西可以让我在那里的一部分,我可以分叉和修改?
答案 0 :(得分:1)
您可以通过四种方式实现布尔检索来选择给定类别:
不在ruby-on-rails
但可能很容易从c#
翻译:
public bool IsMatch(string s)
{
s = s.ToLower();
bool ret = ((negWords.Count == 0) || !hasMatchInSet(s, negWords, true))
&& ((posWords.Count == 0) || hasMatchInSet(s, posWords, false))
&& ((words.Count == 0) || hasMatchInSet(s, words, true));
return ret;
}
private bool hasMatchInSet(string s, HashSet<string> setOfWords, bool breakOnFirstMatch)
{
int matches = 0;
bool ret = false;
foreach (string w in setOfWords)
{
if (s.IndexOf(w, StringComparison.InvariantCultureIgnoreCase) >= 0)
{
matches++;
if (breakOnFirstMatch)
{
break;
}
}
}
ret = (breakOnFirstMatch && (matches > 0)) || (matches == setOfWords.Count);
return ret;
}