Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Procedura składowana T-SQL do zwracania sugerowanych wyników wyszukiwania w stylu Google

Zasugeruję wyszukiwanie pełnotekstowe (działa MS lub Lucene) Poniższy kod używa MSSQL FTS jako tego, czego obecnie używam w mojej aplikacji.

Zainstaluj FTS Search, jeśli jeszcze tego nie zrobiłeś. Jeśli masz sprawdź, czy usługa jest uruchomiona.W studiu zarządzania uruchom to, aby skonfigurować katalog i dodać tabelę produktów; oraz Kolor / Nazwa / Numer produktu do katalogu.

USE [AdventureWorks]
GO
CREATE FULLTEXT CATALOG [ProductsTest]WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo]

GO

USE [AdventureWorks]
GO
CREATE FULLTEXT INDEX ON [Production].[Product] KEY INDEX [PK_Product_ProductID] ON ([ProductsTest]) WITH (CHANGE_TRACKING AUTO)
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Color])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Name])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([ProductNumber])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ENABLE
GO

Następnie możesz uruchamiać zapytania we wszystkich kolumnach jednocześnie; np. Srebro (wybrane według koloru i nazwy)

Select * from production.product where
contains(*, '"Silver*"')

Znak * w zapytaniu znajdzie Silver*, więc możesz go użyć do tworzenia wyników w miarę wpisywania przez użytkownika. Jedną z rzeczy do rozważenia jest to, że google sprawi, że to będzie działać w czasie rzeczywistym - jeśli przeszukujesz dużo danych, możesz odzyskać dane bez przerywania wpisywania przez użytkownika. Myślę, że generalnie ludzie używają tych wyszukiwań, wpisując od pierwszej litery, której szukają - zgadzam się, że będą błędy ortograficzne - możesz zaimplementować sprawdzanie pisowni po każdym naciśnięciu spacji, być może, aby to naprawić. Lub zapisz uruchomione wyszukiwania i sprawdź błędy pisowni i zmień kod, aby obsłużyć to w oparciu o mapowanie (lub w FTS przy użyciu niestandardowego tezaurusa).

Ranking będzie zabawną kwestią w rozwoju każdego biznesu; Czy znajdujesz pierwszy wynik dla Mountain Frame — czy chcesz je zważyć według sprzedaży lub ceny? Jeśli użytkownik wpisze więcej niż jeden termin tekstowy, można użyć FTS do utworzenia rankingu na podstawie ciągu wyszukiwania.

select aa.rank, bb.* 
From containstable(production.product, *, '"Mountain" and "Silver*"') aa
inner join production.product bb
on aa.[key] = bb.productid
order by rank desc

Zwraca 30 wierszy; oraz wagi na podstawie tekstu wprowadzonego przez użytkownika w celu określenia rekordu pierwszego miejsca. W obu przypadkach prawdopodobnie będziesz chciał dodać kodowany ranking, aby dostosować wyniki do swoich potrzeb biznesowych – ranking najdroższego widżetu 1 może nie być dobrym rozwiązaniem. Dlatego zamierzasz przechowywać to, czego ludzie szukali / klikali, abyś mógł później przeanalizować wyniki.

Istnieje naprawdę fajny parser języka dla .Net, które tłumaczy zapytanie w stylu Google wprowadzone na język FTS, co zapewnia znajomość wszystkich wyszukiwań logicznych, które wykorzystują Twoją witrynę.

Możesz również dodać trochę mądrości funkcji tłumów, sprawdzając, co użytkownicy wnieśli, a ostatecznie udali się do odwiedzenia i skorzystania z map sukcesu, aby zmienić ostateczne sugestie, aby rzeczywiście były odpowiednie dla użytkownika.

Jako ostateczną sugestię, jeśli jest to witryna komercyjna, możesz zajrzeć na Easyask który jest przerażającym świetnym procesorem języka naturalnego



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VB.NET - Nie udało się przekonwertować wartości parametru z ciągu na problem z Guid

  2. Jaki jest cel replikacji danych?

  3. Znajdź ciąg, przeszukując wszystkie tabele w SQL Server

  4. Czy powinienem indeksować pole bitowe w SQL Server?

  5. Uzyskaj rozmiar wszystkich tabel w bazie danych