9

Chciałbym mieć możliwość wyszukiwania każde słowo tak mam wyczyszczone listę przystanek słowo. Potem przebudowałem indeks. Ale niestety, jeśli wpiszesz wyrażenie do wyszukania ze słowem "stop", to nadal nie zwraca wiersza. Jeśli zapomnę tylko słowo "stop", otrzymam wyniki. Na przykład. "podwójne zużycie w miejscu" - brak rezultatu, "podwójne miejsce na zużycie" - otrzymuję wyniki, które faktycznie zawierają również "in".Wyszukiwanie pełnotekstowe nie działa, jeśli przystanek słowo jest wliczone chociaż słowo przystanek lista jest pusta

Czy ktoś wie, dlaczego tak się dzieje? Używam programu SQL Server 2012 Express.

Wielkie dzięki!

Odpowiedz

23

Tymczasem udało mi się rozwiązać problem. Problem polegał na tym, że miałem własną listę stopów, która była rzeczywiście pusta, ale mój katalog pełnotekstowy był powiązany nie z moją własną stoplistą, ale z systemem. Oto kilka przydatnych zapytań do rozwiązywania stopword i pełne problemów Poszukiwanie (! Nie oddać te systemowe)

stopwords zapytanie:

select * from sys.fulltext_stopwords 

listy zatrzymania Query (nie oddać system listy):

select * from sys.fulltext_stoplists 

Sprawdź jakie słowa są zawarte w katalogu:

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

Sprawdź powiązania:

select fulltext_catalog_id,stoplist_id, * from sys.fulltext_indexes; 

Turn off STOPLIST:

ALTER FULLTEXT INDEX ON CremeSearchFT SET STOPLIST = OFF 

Mam nadzieję, że ktoś pomoże. :)

+0

Czy masz na myśli, że twój "katalog pełnotekstowy" nie był powiązany z listą przesterów lub twoim "indeksem pełnotekstowym"? Mam problem z moją własną stoplistą. –

3

Na podstawie moich badań, jest to związane z Full-Text Index Stop-lista opcji, jedną z głównych cech Full-Text Index. Jeśli ustawisz tę opcję na "System", wszystkie słowa kluczowe zawarte w "Systemowej liście zatrzymań" nie będą dostępne dla twoich CONTAINS() klauzul i niestety nie będzie żadnych zestawów wyników dla takich przypadków. Rozwiązanie;

Aby ustawić tę opcję na „Off”, który ominie przystanku lista kontrolna w zestawie językowej. Na przykład ty w języku angielskim, sen w turecki. Są one oznaczone jako słowa kończące i mają sens, aby SQL Server Engine był wykluczony z takich wyszukiwań, chyba że ustawisz opcję "system". Więc nie używaj opcji "System". Aby to zrobić, pls uruchomić następujący skrypt na db, który istnieje tabela:

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = OFF 

Aby utworzyć własną listę stop. W takim przypadku możesz zdefiniować specjalne słowa stopu i utworzyć określone listy zatrzymań. Tak więc tylko te będą traktowane tak, jak nie będą miały sensu dla SQL Server Engine. Po utworzeniu go, można rozpocząć korzystanie z tego, uruchamiając następujące scenariusze:

CREATE FULLTEXT STOPLIST myStoplist 

GO 

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

GO 

ALTER FULLTEXT INDEX ON table_name SET STOPLIST = [myStoplist] 

GO 

Mam nadzieję, że to pomoże :) Powodzenia ...

0

W przypadku gdy ktoś jest zainteresowany, ja dopracować kwerendy stowarzyszenie wyboru w odpowiedzi apolka by dać wyniki bardziej czytelne:

--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 

Więc to głupie rzeczy brakuje SSMS!

Powiązane problemy