【问题标题】:How to build an internal search engine?如何建立内部搜索引擎?
【发布时间】:2011-08-01 15:37:06
【问题描述】:

我正在寻找一种方法来构建一个内部搜索引擎,该引擎将根据条件搜索交易。 我遇到的问题是更多的标准意味着更多的检查..所以如果有 6 个标准..我几乎必须在 IF 语句中执行 6 x 6 = 36 ELSE。这么大..我很确定还有其他方法可以做到。

说明:如果我有一个具有 A、B、C、D、E、F 的对象,我必须检查是否

A,B,C,D,E NOT F
A,B,C,D, NOT E, F
A,B,C, NOT D, E, F
etc..

那么我该如何处理呢? (我在 WPF 中使用 C#)

编辑:这里有更多细节。

  • 这是代码而不是 SQL。
  • 必须评估的标准数量取决于用户。

谢谢。

【问题讨论】:

  • 您能否发布更多详细信息,例如您对此有何标准?它们如何指定给搜索引擎等。这样会更容易更好地回答。
  • 您对需要多少个 IF 语句的计算不正确。你真的需要 2^6=64 语句,而不是 6^2。如果你想要 A="blah" 和 A NOT ="blah" 那么你需要 2^7=128 检查。 (嗯,是这样吗?)
  • (显然我并不是建议你硬编码 128 if 语句)
  • @Brian 我希望所以我为什么在这里问大声笑,但是是的,我犯了一个错误,它正是我需要的 64 条语句..但我不能硬编码这个..那太疯狂了。
  • @Lasse 我有一个对象和一个搜索引擎,您可以在其中输入 6 个条件。您必须能够评估这 6 个标准,以确定交易是否是结果的一部分。

标签: c# wpf search


【解决方案1】:

做这种事情的方法是建立某种表达树。这可能只是标准对象列表。每个对象都有一个“检查”方法来判断元素是否通过了测试。您可以在运行时构建此列表,然后使用它来检查每个候选者。

或者看看 LINQ。它非常适合。

【讨论】:

  • 有趣。好吧,我正在考虑为此制作一个对象,但我虽然这会导致完全相同的问题。但也许不是......将不得不看看这个。
  • 有各种方法可以做到这一点。诀窍是记住您可以在运行时构建和使用数据结构。不要被“静态”思维所束缚。
  • 此解决方案完美运行。谢谢!你为我节省了很多时间!
【解决方案2】:

我假设您正在构建一个 sql 命令。通常,我们只会放置一系列附加 SQL 的 IF/CASE 语句(每个可能的参数一个)。但是现在,您可以使用 LINQ:

var q = from c in Customers select c;

if(!String.IsNullOrEmpty(param.Name))
    q = q.Where(c => c.Name.Contains(param.Name));

if(param.CustID.HasValue)
    q = q.Where(c => c.ID == param.CustID);

if(!String.IsNullOrEmpty(param.CustAddr))
    q = q.Where(c => c.Addr.Contains(param.CustAddr));

//use your results!

【讨论】:

  • 它应该是q = q.Where....,否则你只是扔掉了新的IQueryable对象。
  • 所以这个想法基本上是用LINQ查询消除每一步的事务(那些不符合标准的)?
猜你喜欢
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
相关资源
最近更新 更多