Witam.

Nigdzie nie mogą znaleźć jak wykonać wyszukanie na bazie danych mssql 2005, aby uzyskać "jak najlepsze rezultaty".

Jest założony index na kolumny z tekstem, używam funkcji CONTAINSTABLE, która działa świetnie. Frazę trzeba podać wg notacji BNF (tutaj opis notacji: http://doc.ddart.net/mssql/sql70/ca-co_15.htm ).

Przez "jak najlepsze wyniki" rozumiem takie coś:

Podaje 3 słowa do szukania (liczba słów może być dowolnie większa), i chciałbym otrzymać rezultaty, które najlepiej odpowiadają tym trzem wyrazom (a nie każdemu z osobna!). Próbowałem kombinować z operatorem ISABOUT, ale niestety nie wiele z tego wyszło. Jeżeli wiersz by posiadał te 3 słowa jeden po drugim, to idzie pierwszy. Później wszystkie wiersze, które zawierają te 3 słowa (AND), później te, które zawierają co najmniej 2, a na końcu te, w których dowolne słowo występuje choć raz (mniej więcej tak, wydaje mi się, że to najlepszy pomysł).

Kilka uwag:

  • używam select(@top), więc liczba rezultatów jest dowolna
  • słów może być dowolna liczba (w granicach rozsądku oczywiście)
  • baza danych MSSQL 2005 Enterprise

Cała notacja idzie z .NET`a przez procedurę składowalną więc nie będzie problemu z przekazywaniem "kilku" parametrów.