2009-06-02 10 views
0

Ich habe eine FTS für ein einzelnes Feld in einer einzigen Tabelle eingerichtet.Brauchen Sie Hilfe mit Sql Server 2008 und Volltextsuche

Field: Name NVARHCHAR(350) NOT NULL 

Nun, wenn ich die folgenden

suchen
1 ave 
10 ave 

ich die Ergebnisse erwarte ich nicht zurück.

Zunächst wird die Suchabfrage 1 ave in "1*" AND "ave*" umgewandelt. Jetzt laufen ich meine ENTHÄLT (..) Abfrage ...

SELECT FooId, Name 
FROM [dbo].[Names] 
WHERE CONTAINS(Name, @SearchQuery) 

Dann, zusammen mit den richtigen Ergebnissen, bekomme ich auch diese falsche Ergebnisse zurück ...

2 Ave (a couple of entries .. but they are all unique entires). 

So, wie tat dies abgerufen werden? es gibt keine 1* in diesem Stück Text? Es ist wie .. die Nummer wird ignoriert?

auch - und das ist wichtig - ich habe einen Verweis auf eine Stoppliste entfernt und den Katalog wieder aufgebaut.

Hmm. Ich bin so verwirrt. Hat jemand irgendwelche Vorschläge?

+1

Ich denke, Ihre transformierte Zeichenfolge sollte lesen "1 *" UND "Ave *" - Fehlende die Schließung "auf der" 1 * – Tetraneutron

+0

Richtig. Gut beobachtet. Fest. –

Antwort

0

Die „1“ kann überall innerhalb der Volltextsuche indiziert Spalte auftreten es nicht direkt sein muss, bevor (oder sogar vor) das „Ave“, gibt es eine 1 woanders in dieser Reihe?

+0

Ja, war es .. im PLZ :(lame Frage von mir. Appologies. –

0

Volltextindizierung derivitaves von Worten finden - wie wenn Sie für RUN suchen, es RUNNING finden könnte, RAN, RUN, usw.

Ich frage mich, ob seine Entscheidung, dass 2 in der Nähe von 1 ist, und die Rückkehr, dass als ein nahes Spiel. Sie sollten versuchen, Ihre Abfrage auf eine CONTAINSTABLE-Abfrage umzustellen, damit Sie auch den RANK auswerten können, um zu ermitteln, welche der Antworten näher beieinander liegt. Sie können sich dann für einen Schwellenwert entscheiden und alle Zeilen herausfiltern, die nicht Ihren Kriterien entsprechen, wie nahe eine Übereinstimmung ist.

EDIT: Es ist nicht die Wende tut 1 Denken ist in der Nähe von 2. ich eine Testabfrage auf einem Probentisch lief, der so aussah ...

PK   Name 
1   1 ave 
2   10 ave 
3   2 ave 
4   12 avenue 
5   13 avenue 
6   100 ave. 
7   200 ave 
8   210 avenue 

Hier ist die Abfrage, die ich lief ...

select * 
from Table_1 
where contains(name, '"1*" and "ave*"') 

Und hier die Ergebnisse bekomme ich ...

PK   Name 
2   10 ave 
4   12 avenue 
5   13 avenue 
6   100 ave. 

die hier interessante Sache ist, dass die erste Platte in der Tabelle wird nicht gefunden. (Ich habe dies auf SQL 2008 Dev Edition ausgeführt). Basierend auf diesen Ergebnissen (wo nichts mit 2 beginnend gefunden wurde) - würde ich Ihre Abfrage überprüfen. Vielleicht posten Sie den vollständigen Text Ihrer gesamten Abfrage, einschließlich der Stelle, an der die Suchvariable gesetzt wird.

+0

Sobald Sie den Platzhalter (*) verwenden Volltextsuche wird mit Thesaurus Ersatz stoppen. – Tetraneutron

+0

Ja, ich ziemlich sicher war, dass der Fall war Nachdem ich alles nochmal durchgelesen habe, sieht es so aus, als ob der ursprünglichen Abfrage das Zitat nach dem 1 * fehlt. –

+0

das erste Ergebnis fehlt, denke ich, wegen StopWords. Versuchen Sie das auszuschalten. –