我想知道通过仅使用1个搜索框,通过多列搜索数据库的最佳方法是什么。下面的情景:
我希望能够通过在搜索框中输入详细信息来搜索客户。这可以是他们的姓名,邮政编码或身份证。我还可以使用超过1个搜索条件执行1次搜索。例如,我可以按名称和ID搜索(Bob Smith cus345)。
我采取的第一种方法是拆分搜索词,将每个空格分隔成一个单独的单词但由于客户名称可能包含3-4个单词而导致其下降。这可能会产生大量的条件语句,但效率很低,所以我想知道是否有更好的方法可以做到这一点。
我发现这是一项艰巨的任务,因为用户可以按任何顺序搜索(即通过邮政编码搜索,然后搜索姓名,然后搜索身份证,或姓名和身份证等等)
答案 0 :(得分:2)
您可以使用正则表达式来检测特定字词,例如邮政编码,但您说的是,无论哪种方式,您最终会遇到大量条件。
我强烈推荐使用Lucene.net。实现起来并不困难,但它默认提供排名结果,闪电般快(比存储过程更快地针对多项查询),并且可以轻松满足您所描述的搜索类型。您还可以对某些字段进行加权/偏移,因此部分邮政编码匹配比第一个名称匹配更重要。
关于拆分搜索,我通常会检查保留字符,如*和(或者,如果我不希望用户能够自己执行复杂搜索,甚至可以完全删除它们。然后我会分开单词boundarys并执行AND搜索。
据我所知,还有一个Lucene to Linq提供商。
答案 1 :(得分:0)
我在具有类似要求的项目上使用了full text search,而不是EF,我使用linq到sql,但我相信特定的全文搜索功能可以通过表函数映射到EF