我有一个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)的东西,也就是几个分离的连接。
然后将结果存储在某种数据结构中,这些数据结构以后可以用作筛选器。理想情况下,这一切都是通过图形界面完成的,而不是让用户在文本中构造布尔逻辑。
在我尝试自己实现这个之前,是否有一个已经实现了这个或类似的库?或者是一些开源的东西,可以让我成为其中的一部分,并且可以分叉和修改?
发布于 2014-04-01 08:40:32
您可以通过选择给定类别的四种方法实现布尔检索:
不是在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;
}https://stackoverflow.com/questions/22775496
复制相似问题