sql >> Databáze >  >> RDS >> Sqlserver

Uložená procedura T-SQL pro vrácení výsledků vyhledávání navržených ve stylu google

Navrhuji fulltextové vyhledávání (bude fungovat MS' nebo Lucene) Níže uvedený kód používá MSSQL FTS jako to, co momentálně používám ve své aplikaci.

Pokud jste tak ještě neučinili, nainstalujte si FTS Search. Pokud jste zkontrolovali, že služba běží. V management studiu spusťte toto pro nastavení katalogu a přidání tabulky produktů; a barvu / název / číslo 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

Poté můžete spouštět dotazy na všechny sloupce najednou; např. Stříbrná (zvolena jako barva a název)

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

Znak * v dotazu najde Silver*, takže jej můžete použít k vytváření výsledků, když uživatel zadává. Jedna věc, kterou je třeba vzít v úvahu, je, že google to funguje v reálném čase – pokud prohledáváte velké množství dat, abyste byli schopni získat data zpět bez přerušení psaní uživatele. Myslím, že obecně lidé používají tato vyhledávání psaním od prvního písmene, které hledají - uznávám, že se vyskytnou pravopisné chyby - možná byste mohli implementovat kontrolu pravopisu po každém stisknutí mezery, abyste to zvládli. Nebo uložte provedená vyhledávání a podívejte se na překlepy a změňte kód tak, aby to zvládl na základě mapování (nebo ve FTS pomocí vlastního tezauru.)

Hodnocení bude zábavnou vývojovou záležitostí každého podnikání; nacházíte první výsledek pro Mountain Frame -nebo je chcete zvážit podle prodeje nebo ceny? Pokud uživatel zadá více než jeden textový výraz, můžete pomocí FTS vytvořit hodnocení na základě vyhledávacího řetězce.

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

To vrátí 30 řádků; a váhy založené na textu zadaném uživatelem k určení prvního místa záznamu. V obou případech budete pravděpodobně chtít přidat kódované hodnocení, abyste vyladili výsledky tak, aby vyhovovaly vašim obchodním přáním – hodnocení nejdražšího widgetu 1 nemusí být cesta. To je důvod, proč budete ukládat to, co lidé hledali / na které klikli, abyste mohli později analyzovat výsledky.

Existuje opravdu pěkný analyzátor jazyků for .Net, který překládá řetězcový dotaz ve stylu google zadaný do jazyka schopného FTS, který umožňuje obeznámenost s booleovskými vyhledáváními, která používají váš web.

Možná také budete chtít přidat nějaké moudré funkce davu tím, že provedete audit podle toho, co uživatelé vložili a nakonec je navštívili, a použijte mapy úspěchu ke změně konečných návrhů tak, aby byly pro uživatele skutečně relevantní.

Jako poslední návrh, pokud se jedná o komerční web, se můžete podívat na Easyask což je děsivě skvělý procesor přirozeného jazyka



  1. Jak monitorovat PostgreSQL pomocí Nagios

  2. MySQL, dotaz je příliš pomalý, jak jej zlepšit?

  3. Spusťte uloženou proceduru MySQL pomocí příkazového řádku

  4. PDO Multi-query SQLSTATE[HY000]:Obecná chyba