Проверка строки на наличие фраз тегов в таблице SQL Server с использованием классического ASP

Я разрабатываю поисковую систему...

Пользователь вводит следующий запрос: «финансы менеджеров проектов».

У нас есть таблица с тегами...

tbl_tags со следующими элементами (фразами) в таблице:

ID   Tag
 1   Project Managers
 2   Programme Managers
 3   Finance
 4   Finance Managers

Я хочу разделить поисковую фразу и получить результаты, которые точно совпадают с базой данных. Например. ID 1 и 3 (не 2 и 4)

Каков наилучший способ сделать это как SQL-запрос?

Мой текущий метод очень длинный и включает в себя получение всех результатов для каждого слова в запросе, например. Contains(tag,"project OR manager OR finance"), производя все результаты для этого, а затем сравнивая каждый полученный tag с использованием instr(query,oRS("Tag")).

У меня включен полный текст, поэтому при необходимости можно использовать contains.


person Chris Dowdeswell    schedule 10.06.2011    source источник
comment
Какую СУБД вы используете?   -  person Daniel Hilgarth    schedule 10.06.2011
comment
SQL Enterprise Manager (Db — это SQL Server 2008 R2)   -  person Chris Dowdeswell    schedule 10.06.2011


Ответы (2)


Я только что нашел решение этой проблемы, используя CHARINDEX для сравнения результатов CONTAINS со строкой.

http://msdn.microsoft.com/en-us/library/ms186323.aspx

person Chris Dowdeswell    schedule 10.06.2011

Реализация по книге:

Option Explicit

Const adVarChar = 200  ' remove if that constant is already defined

Dim tags, term
Dim placeholders, sql, cmd, result

tags = Split(Request("searchterms"), " ")

Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = dbConnection ' I assume the connection object exists

For Each term In tags    
  term = Trim(term)
  If term <> "" Then 
    placeholders = placeholders & ",?"    
    cmd.Parameters.Append cmd.CreateParameter(, adVarChar, , 100, term)
  End If
Next

If cmd.Parameters.Count > 0 Then
  sql = "SELECT id FROM tbl_tags WHERE tag IN (" & Mid(placeholders, 2) & ")" 
  cmd.CommandText = sql

  Set result = cmd.execute

  While Not result.EOF
    Response.Write result.Fields("id") ' whatever
    result.MoveNext
  Wend
End If

Также ознакомьтесь с документацией по CreateParameter.

person Tomalak    schedule 10.06.2011