0

大家好,我是一名新手程序员,我正在尝试在 VB 中构建一个以 MySQL 作为后端的搜索引擎。数据库不是那么大,只是存储了一些概念,而是以图像、文本、PDF 的形式。

现在我已经设法连接到我的数据库,但我不知道要编写什么代码来获得像 Google 这样的搜索结果。例如,如果我搜索选择文本格式,我应该得到段落中的结果,如果它的图像那么结果应该是存储在我的数据库中的图像。谁能帮我写代码,因为我不知道从哪里开始

4

1 回答 1

-1

这是我几年前所做的:

Imports System.Linq
Imports System.Linq.Expressions
Imports System.Collections.Generic
Imports System.Runtime.CompilerServices



Module PredicateBuilder
Sub New()
End Sub
Public Function [True](Of T)() As Expression(Of Func(Of T, Boolean))
    Return Function(f) True
End Function
Public Function [False](Of T)() As Expression(Of Func(Of T, Boolean))
    Return Function(f) False
End Function

<System.Runtime.CompilerServices.Extension()>
Public Function [Or](Of T)(expr1 As Expression(Of Func(Of T, Boolean)), expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
    Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
    Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[OrElse](expr1.Body, invokedExpr), expr1.Parameters)
End Function

<System.Runtime.CompilerServices.Extension()>
Public Function [And](Of T)(expr1 As Expression(Of Func(Of T, Boolean)), expr2 As Expression(Of Func(Of T, Boolean))) As Expression(Of Func(Of T, Boolean))
    Dim invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast(Of Expression)())
    Return Expression.Lambda(Of Func(Of T, Boolean))(Expression.[AndAlso](expr1.Body, invokedExpr), expr1.Parameters)
End Function
End Module

我就是这样使用这个类的:

    'POST: /Search
    <HttpPost()>
    Function contactSearch(ByVal search As String, ByVal opportunite As opportunite) As ViewResult

        Dim chaine As String = Request("searchString") 'obtient la chaine introduite par l'user au clavier
        Dim tabMot() = chaine.Split(New Char() {" "c}) 'transforme la chaine en tableau de mots
        Dim distance As Integer
        distance = Request("dist")                      'obtient la valeur introduite par l'user dans la CBbox

        Dim flag As String = "ok"                       'sert à dire à la vue qu'on est passé par  ici, et qu'il peut tenter d'afficher les résultats de la recherche
        Dim n As Integer = 0                            'sert à compter le nombre de contacts récupérés. On introduira cette valeur dans la taille du tableau qui sera créé
        Dim i As Integer = 0                            'sert d'indice dans le tableau dans lequel sont stockées les coordonnées


        'Tout ce bloc sert à construire une liste de contacts répondant aux critères
        Dim predicate As Expression(Of Func(Of contact, Boolean))
        predicate = PredicateBuilder.False(Of contact)()
        For Each mot In tabMot
            Dim tmp = mot
            predicate = predicate.And(Function(m) m.titre.Contains(tmp))
            predicate = predicate.Or(Function(m) m.departement.Contains(tmp))
            predicate = predicate.Or(Function(m) m.qualifications.Contains(tmp))
            predicate = predicate.Or(Function(m) m.langue1.Contains(tmp))
            predicate = predicate.Or(Function(m) m.langue2.Contains(tmp))
            predicate = predicate.Or(Function(m) m.langue3.Contains(tmp))
            predicate = predicate.Or(Function(m) m.langue4.Contains(tmp))
            predicate = predicate.Or(Function(m) m.langue5.Contains(tmp))

        Next
        Dim contacts = db.contact.AsExpandable().Where(predicate).ToList()

希望这可以帮助。(我正在使用 Linq 到实体)

于 2013-09-29T16:18:38.483 回答