2011-01-18 11 views
6

Jestem nowy w wyszukiwaniu pełnego tekstu SQL Server i próbuję znaleźć najlepszy sposób wyszukiwania wielu słów przy użyciu silnika fleksyjnego, więc wyszukiwanie wykorzystuje różne formy wszystkich słów.Wyszukiwanie pełnotekstowego serwera SQL przy użyciu ZAWIERA, FORMSOF, BLISKO dla wielu słów wyszukiwania

Z tego co przeczytałem, FREETEXT używa niejawnego OR, gdy jest używane z wieloma słowami. Chcę AND, aby wyniki wyszukiwania zawierały wszystkie słowa, więc z tego powodu wybieram użycie CONTAINS.

Próbuję zrobić coś podobnego do poniższego zapytania, które używa FORMSOF z bliskim słowem kluczowym NEAR dla wielu słów. Zauważ, że to nie jest prawidłowa składnia i zwraca błąd:

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model NEAR airplane)') 

Jednak zapytanie poniżej utworów, ale nie wiem, czy to daje zamierzonych rezultatów. Czy istnieje różnica między "AND" i "NEAR" z SQL Full Text Search?

select top 5 * 
from content 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, model) AND FORMSOF(INFLECTIONAL, airplane)') 

Chyba co pytam, czy istnieje sposób na wykorzystanie zawiera FORMSOF, w pobliżu wielu z wyszukiwania słów? A może powinienem użyć drugiego powyższego zapytania, które używa "AND"?

Odpowiedz

9

Od docs:

<proximity_term> ::= 
    { <simple_term> | <prefix_term> } 
    { { NEAR | ~ } 
    { <simple_term> | <prefix_term> } 
    } [ ...n ] 

Oznacza to, że można używać NEAR orzecznik dla (ewentualnego) prefiksem słów, fraz i ich kombinacji.

Ponieważ wyszukiwane hasła są odmieniane używając dość prostych zasad, można po prostu użyć przedrostki:

SELECT * 
FROM content 
WHERE CONTAINS((Title,Subtitle,Body), 'model* NEAR airplane*') 

lub używają AND i poradzi filtrowanie po stronie klienta

SELECT * 
FROM ft 
WHERE CONTAINS((Title,Subtitle,Body), 'FORMSOF(INFLECTIONAL, "model") AND FORMSOF(INFLECTIONAL, "airplane")') 
Powiązane problemy