2010-08-07 17 views
7

Ich verwende die folgende Abfrage, um Ergebnisse aus einer Tabelle mit Volltextsuche zurückgeben. In SQL2000 konnten nur eine oder alle Spalten einer Tabelle durchsucht werden. Ist es in SQL 2008 möglich?SQL Server Volltextsuche FREETEXTTABLE Suche mehrere Spalten

Ich mag zwei Tabellen suchen, Problem und Lösung (beide indiziert und in der gleichen Tabelle):

DECLARE @topRank int set @topRank=(SELECT MAX(RANK) 
FROM FREETEXTTABLE([Support_Calls], Problem, 'test', 1)) 
SELECT [ID] AS [Call No],Company_Name, Problem, Solution, CONVERT(VARCHAR(20),CAST((CAST(ftt.RANK as DECIMAL)/@topRank * 100) AS DECIMAL(13,0))) + '%' as Match 
FROM [Support_Calls] INNER JOIN FREETEXTTABLE([Support_Calls], Problem, 'test') as ftt ON ftt.[KEY]=[ID] ORDER BY ftt.RANK DESC; 

Von dem, was ich die FREETEXTTABLE akzeptiert keine mehr als eine Spalte sehen kann?

Antwort

12

Sie geben sie in Klammern an; FREETEXTTABLE(tablename, (col1,col2,col3), 'expr') oder verwenden Sie ein Sternchen, um alle Spalten im Index zu suchen.

+1

Wird das Sternchen nicht die Leistung beeinträchtigen, wenn es ohne Diskretion verwendet wird? – Tobiasopdenbrouw

+1

Ja, wenn es eine Spalte im Index gibt, die Sie nicht interessieren. –

0

From MSDN,

Gibt eine Tabelle von Null, einer oder mehr Zeilen für diese Spalten enthalten, zeichenbasierte Datentypen für Werte, die die Bedeutung entsprechen, aber nicht den genauen Wortlaut des Textes in dem angegebenen freetext_string. FREETEXTTABLE kann nur in der FROM-Klausel einer SELECT-Anweisung wie ein normaler Tabellenname referenziert werden. Abfragen, die FREETEXTTABLE verwenden, geben Volltextabfragen vom Typ freetext an, die für jede Zeile einen Relevanzrangwert (RANK) und einen Volltextschlüssel (KEY) zurückgeben.

Sie geben die folgende Syntax:

FREETEXTTABLE (table , { column_name | (column_list) | * } 
      ,'freetext_string' 
    [ , LANGUAGE language_term ] 
    [ ,top_n_by_rank ]) 

Also ja, was Alex K. auch gesagt.

0

Wenn Sie einen FULLTEXT INDEX in verschiedenen Spalten erstellt haben, können Sie CONTAINS oder FREETEXT verwenden, um auf einen von ihnen zu schauen, auf alle oder auf einige davon. Wie folgt:

SELECT * 
FROM YourTable 
WHERE CONTAINS(*, @SearchTerm); 

If you want to look on all the columns that are included in the FULLTEXT INDEX. or: 

SELECT * 
FROM YourTable 
WHERE CONTAINS((ProductName, ProductNumber, Color), @SearchTerm); 

Wenn Sie die Spalten angeben möchten, die Sie durchsuchen möchten. Wenn Sie die Ergebnisse in einer Spalte benötigen, müssen Sie eine UNION erstellen und nach jeder Spalte suchen, die Sie durchsuchen möchten.

SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductName, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(ProductNumber, @SearchTerm) 
UNION 
SELECT * 
FROM YourTable 
WHERE CONTAINS(Color, @SearchTerm) 
+1

Wie würde ich tun, wenn ich nur einen Teil des Wortes brauche, aber immer noch das ganze Wort anzeigen würde? Wenn der Suchwert "Curt" ist, lautet das Suchergebnis "Curtain, Curtis, Curtman ..." – Rich

Verwandte Themen