LINQ(自定义筛选器查询)中的完整搜索测试
我有一张桌子,上面有一张餐馆名称列表,还有一张桌子的链接,上面有另一种烹饪类型 我想在我的网页上提供一个搜索框,在键入时,在数据库中搜索每个单词并返回结果。我一直在寻找一个解决方案,它不涉及设置sql全文搜索,因为我希望能够使用LINQtoSQL测试这一点 根据我以前的代码,我有一个函数,该函数在给定输入文本的情况下创建一个查询过滤器,并根据该过滤器返回所有结果LINQ(自定义筛选器查询)中的完整搜索测试,linq,tdd,full-text-search,Linq,Tdd,Full Text Search,我有一张桌子,上面有一张餐馆名称列表,还有一张桌子的链接,上面有另一种烹饪类型 我想在我的网页上提供一个搜索框,在键入时,在数据库中搜索每个单词并返回结果。我一直在寻找一个解决方案,它不涉及设置sql全文搜索,因为我希望能够使用LINQtoSQL测试这一点 根据我以前的代码,我有一个函数,该函数在给定输入文本的情况下创建一个查询过滤器,并根据该过滤器返回所有结果 Private Function SetupQuery(ByVal searchText As String) As String
Private Function SetupQuery(ByVal searchText As String) As String
Dim searchFields As New List(Of String)
searchFields.Add("Name")
searchFields.Add("Postcode")
searchFields.Add("Cuisine")
Dim firstCol As Boolean = True
Dim a() As String
Dim j As Integer
a = searchText.Trim.Split(" ")
Dim filter As String = ""
Dim compareString As String
For Each col As String In searchFields
For j = 0 To a.GetUpperBound(0)
compareString = a(j).ToUpper()
compareString = compareString.Trim()
If firstCol Then
filter = filter & col & " LIKE '" & compareString & "%' "
firstCol = False
Else
filter = filter & " or " & col & " LIKE '" & compareString & "%' "
End If
Next
Next
Return filter
End Function
这将对搜索字段进行硬编码,然后循环搜索文本中的每个字段和每个单词,以构造一个或类似的过滤器
我确信我可以在我的LINQ代码中使用它,但这似乎不是一个优雅的解决方案,特别是因为列是硬编码的,而不是LINQ如何使用它们
有谁能推荐一个更好的方法来做这件事,或者在这件事上有什么建议吗
谢谢我不知道这将如何影响您的测试,但LinqtoSQL可以通过一些微调与全文索引一起工作:
from t in temp
where t.Name == a(0)
|| t.Postcode == a(1)
|| t.Cuisine == a(2)
select t
我通常使用C#,所以VB中的任何东西都会让人害怕,但我认为LINQ语法应该类似您可以使用全文搜索,但仍然可以使用LINQ to SQL。您可以创建一个存储过程并让LINQ调用它。除了查找精确匹配外,您还可以返回:
- 简单搜索特定的单词或短语
- 同义词词典搜索——在IE上搜索可能会返回对Internet Explorer和IE的点击(基于词典的扩展搜索);对孟买的搜索也可能返回对孟买的点击(基于同义词的替换搜索)
- 搜索将返回一个词的所有不同语言形式(称为代词),在bank上搜索将返回对banking、banked、banks、banks’s和bank’s等的点击(搜索词bank的所有变位和/或变位)
- 不区分重音的搜索——在café上的搜索将返回对cafe和café的点击