Frage

Ich habe eine Volltext indizierte Tabelle in SQL Server 2008, dass ich für eine genaue Wortgruppe zu Abfrage versuchen FULLTEXT- verwenden. Ich glaube nicht, mit ENTHÄLT oder LIKE ist für diese angemessen, weil in anderen Fällen die Abfrage nicht genau sein könnte (Benutzer nicht Surround-Phrase in doppelte Anführungszeichen) und im Allgemeinen möchte ich Flexibilität von FREETEXT-.

Nach der Dokumentation [MSDN] für FREETEXT-:

Wenn freetext_string in doppelten Anführungszeichen gesetzt wird, wird eine passende Wortgruppe statt durchgeführt werden; entwickelt wird und Thesaurus nicht durchgeführt werden.

, die mich führen würde eine Abfrage wie folgt glauben:

SELECT Description  
FROM Projects   
WHERE FREETEXT(Description, '"City Hall"')  

würde nur Ergebnisse angezeigt, wo der Begriff „City Hall“ erscheint im Feld Beschreibung, sondern ich Ergebnisse wie folgt aus:

1 Ausführung Handicap Rampe bei Manning Hall.
2 Antenna Untersuchung. Auftraggeber: Stadt Cranston Ingenieur Dept.
3 Strukturelle Untersuchung in Bezug auf Brandschäden an International Tennis Hall of Fame.
4 Untersuchung Dachuntersuchung für vorgeschlagene Satellitenentwurf auf Herald Hall.
... etc

Offensichtlich sind diese Ergebnisse zumindest eines der Worte in meinem Satz, aber nicht der Begriff selbst. Was noch schlimmer ist, hatte ich gedacht, die Ergebnisse sortiert werden würde, aber die beiden Ergebnisse Ich wollte eigentlich begraben sind (weil sie den eigentlichen Ausdruck enthalten).

SELECT Description  
FROM Projects  
WHERE Description LIKE '%City Hall%'  

1 Wichtige Außen- und Innenrenovierung des bestehenden Rathauses für Quincy Massachusetts
2 Flüchtige strukturelle Untersuchung von Pawtucket Rathausturm von Lecks geplagt.

Ich bin sicher, dies ist ein Fall von mir in die Dokumentation nicht zu verstehen, aber ist es eine Möglichkeit, zu erreichen, was ich suche? Und zwar ohne Anführungszeichen in einem Suchbegriff passieren zu können und genau das bekommen, was ich bekomme jetzt oder mit Zitaten und bekommen nur den genauen Begriff?

War es hilfreich?

Lösung

As you said, FREETEXT looks up every word in your phrase, not the phrase as an all. For that you need to use the CONTAINS statement. Like this:

SELECT Description  
FROM Projects   
WHERE CONTAINS(Description, '"City Hall"')

If you want to get the rank of the results, you have to use CONTAINSTABLE. It works roughly the same, but it returns a table with two columns: [Key] wich contains the primary key of the search table and [Rank], which gives you the rank of the result.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top