构建搜索引擎中的多个关键字

时间:2013-04-09 18:39:34

标签: sql asp-classic search-engine keyword

我目前正在尝试使用asp构建内部搜索引擎数据库。我不是专家,只是简单地介绍了这种编码风格。我遇到的麻烦就是:

(例如)我有两个相对相同且具有相同关键字的文档来描述它们。但是,表中的关键字不是以相同的顺序编写的。表中写的所有关键字都用空格分隔。

项目 1个关键字:备件引擎
项目 2个关键字:备用引擎部件

现在,如果我只输入 ONE(1)这些关键词,我所拥有的代码将允许我显示第1项和第2项:

sql = "Select title, descript, url, uid FROM searchMachine WHERE keywords LIKE '%" & Replace(keywords, "'", "''") & "%' ORDER BY uid;"

但是,如果我要在“备用引擎”的搜索框中输入,那么只显示第2项而不是第1项。另外,如果我要输入“零件引擎”或“引擎零件”,它们都不会节目。它似乎只参与列出的前2个(或2对)关键字。我想要实现的目标是允许用户输入的分组关键字(即备用引擎部件)并允许它仍然显示包含任何关键字的所有相关信息,而不必担心编写对或关键字组一遍又一遍。

我知道有一个全文搜索的功能,但我研究过有安全漏洞的实例,所以我想避免冒这个风险。我有一种感觉,这可能更多地与AND或OR语句有关,但如果它需要,我不确定该位置。有没有人对这种情况有任何专业知识并愿意提供帮助?

2 个答案:

答案 0 :(得分:0)

要执行您所说的非常简单,您必须根据搜索项中输入的单词数动态构建WHERE子句,因此您将有一个小循环添加到查询字符串中,从而生成“或“在第一个词之后输入的每个单词的声明,因此如果输入”X,Y和Z“3个单词,您将拥有:

WHERE keywords LIKE 'X'
OR keywords LIKE 'Y'
OR keywords LIKE 'Z'

您可以通过将搜索字词划分为由空格分隔的字词来完成此操作,如果您有多个字词,请将每个字词的“OR”语句附加到查询字符串中...

我不得不承认,krussell是正确的,如果你要重新发明轮子,你应该有一些非常好的理由这样做......

答案 1 :(得分:0)

因此,看看HackyStack在最近的帖子中提出的建议,需要记录一个计数器系统,用于用户输入的单词空格中的中断。对于用户所做的每个空间,“OR keywords LIKE”声明重复。看起来应该是这样的:

Dim strSQL, tmpSQL  
strSQL = "SELECT title, descript, url, uid FROM searchMachine WHERE "  
tmpSQL = "(keywords LIKE "    

Dim Pos
Pos = 1
While Pos > 0
    Pos = InStr(1, strSearch, " ")
    If Pos = 0 Then
        'We have it the end
        tmpSQL = tmpSQL & "'%" & strSearch & "%')"
    Else
        tmpSQL = tmpSQL & "'%" & Mid(strSearch, 1, Pos) & "%' " & DefaultBoolean & " keywords LIKE "
        strSearch = Mid(strSearch, Pos + 1, Len(strSearch))
    End If

End While

因此,为了打破我在这里所拥有的,我们首先设置我们的sql行的开始集。从那里我们需要指定计数器和分隔多个关键字所需的条件。首先,为Pos设置一个标记值,并给它int值为1.接下来我们创建一个InStr(设置被搜索项目的起始值,正在搜索的项目(在这种情况下strSearch等于那个) txtBox名称/值)以及我们在该部分中检查的内容(在这种情况下,搜索单词之间的任何空格)。如果InStr在搜索中找不到空格,那么它将仅作为1个搜索词;否则,它将解析这两个单词并将它们分开,如下所示。

e.g。用户在搜索栏中输入“Spare Engine”
结果回来了:

关键字LIKE'%spare%'或关键字LIKE'%engine%'

我要感谢我的同事HackyStack和4guysfromrolla.com对此的帮助。我希望我解释自己好。