9

Ich möchte jedes Wort suchen können, damit ich die Stoppwortliste gelöscht habe. Dann habe ich den Index neu erstellt. Aber leider, wenn ich einen Suchausdruck mit Stoppwort darin eintippe, gibt es immer noch keine Zeile zurück. Wenn ich nur das Stoppwort weglasse, bekomme ich die Ergebnisse. Z.B. "double wear stay in place" - kein Ergebnis, "double wear stay place" - ich bekomme auch die Ergebnisse, die "in" enthalten.Die Volltextsuche funktioniert nicht, wenn ein Stoppwort enthalten ist, obwohl die Stoppwortliste leer ist

Weiß jemand, warum das sein kann? Ich verwende SQL Server 2012 Express.

Vielen Dank!

Antwort

23

Inzwischen habe ich es geschafft, das Problem zu lösen. Das Problem war, dass ich meine eigene Stop-Liste hatte, die tatsächlich leer war, aber mein Volltext-Katalog war nicht mit meiner eigenen Stoppliste verbunden, sondern mit dem System. Hier sind ein paar nützlichen Anfragen für Stoppwort-Lösung und Volltextsuche Probleme: (! Nicht zurück zu geben, das System ist)

Abfrage Stoppwörter:

select * from sys.fulltext_stopwords 

Abfrage Stopplisten (nicht zurück geben, das System Liste):

select * from sys.fulltext_stoplists 

überprüfen, was Worte sind im Katalog enthalten:

SELECT * FROM sys.dm_fts_index_keywords(DB_ID('dbname'), OBJECT_ID('tablename')) 

Prüfen Sie den Verein:

select fulltext_catalog_id,stoplist_id, * from sys.fulltext_indexes; 

Schalten Stoppliste aus:

ALTER FULLTEXT INDEX ON CremeSearchFT SET STOPLIST = OFF 

Ich hoffe, dass es jemand hilft. :)

+0

Meinst du, dass dein 'Volltextkatalog' nicht mit der Stoppliste oder deinem 'Volltextindex' verbunden war? Ich habe ein Problem mit meiner eigenen Stoppliste. –

3

Basierend auf meinen Forschungen, ist es mit Full-Text Index Stop-Liste-Option, eine der Haupteigenschaften von Full-Text-Index. Wenn Sie diese Option auf "System" setzen, sind alle Schlüsselwörter, die in "System Stop List" enthalten sind, nicht für Ihre CONTAINS()-Klauseln verfügbar. Leider wird es in solchen Fällen keine Ergebnismengen geben. Lösung;

Um diese Option auf "AUS" zu setzen, wird die Sperrliste in Ihrer Sprache umgangen. Zum Beispiel Sie in Englisch, Sen in Türkisch. Diese sind als Stoppwörter gekennzeichnet und es ist sinnvoll, dass die SQL Server Engine bei solchen Suchvorgängen ausgeschlossen wird, es sei denn, Sie legen die Option "System" fest. Also, verwenden Sie nicht die Option "System". Um dies zu tun, pls das folgende Skript zu db ausgeführt, die Ihre Tabelle existiert:

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = OFF 

Um Ihre eigene Stoppliste zu erstellen. In diesem Fall können Sie Ihre speziellen Stoppwörter definieren und spezifische Stopplisten erstellen. Daher werden nur diese behandelt, da sie für die SQL Server Engine keinen Sinn ergeben. Sobald Sie es erstellen, können Sie mit diesem starten, indem Sie die folgenden Skripte ausführen:

CREATE FULLTEXT STOPLIST myStoplist 

GO 

ALTER FULLTEXT STOPLIST [myStoplist] ADD 'you' LANGUAGE 'English' 

GO 

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = [myStoplist] 

GO 

Ich hoffe, das hilft :) Viel Glück ...

0

Falls jemand interessiert ist, prall ich den Scheck Verein Abfrage in apolka Antwort aus mehr lesbar Ergebnisse zu geben:

--Check the association: 
SELECT 
    ft_c.name AS [Catalog], 
    s.name AS [Schema], 
    o.name AS [Table], 
    [StopList] = 
    CASE 
     WHEN ft_i.stoplist_id IS NULL THEN 'None' 
     ELSE ISNULL(ft_sl.NAME, 'System') 
    END 
FROM 
    sys.fulltext_indexes AS ft_i LEFT OUTER JOIN 
    sys.fulltext_stoplists AS ft_sl ON ft_sl.stoplist_id = ft_i.stoplist_id INNER JOIN 
    sys.fulltext_catalogs AS ft_c ON ft_c.fulltext_catalog_id = ft_i.fulltext_catalog_id INNER JOIN 
    sys.objects AS o ON o.object_id = ft_i.object_id INNER JOIN 
    sys.schemas AS s ON s.schema_id = o.schema_id 

dieses Zeug So dumm von SSMS fehlt!

Verwandte Themen