Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Prosedur tersimpan T-SQL untuk mengembalikan hasil pencarian yang disarankan gaya google

Saya akan menyarankan pencarian teks lengkap (MS' atau Lucene akan berfungsi) Kode di bawah ini menggunakan MSSQL FTS seperti yang saya gunakan di aplikasi saya saat ini.

Instal Pencarian FTS jika Anda belum melakukannya. Jika Anda telah memeriksa bahwa layanan sedang berjalan. Di studio manajemen, jalankan ini untuk menyiapkan katalog dan menambahkan tabel produk; dan Warna / Nama / Nomor Produk ke katalog.

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

Anda kemudian dapat menjalankan kueri terhadap semua kolom sekaligus; misalnya Perak (Dipilih sesuai warna dan Nama)

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

* pada kueri akan menemukan Perak* sehingga Anda dapat menggunakan ini untuk membangun hasil saat pengguna mengetik. Satu hal yang perlu dipertimbangkan adalah bahwa google membuat ini berfungsi secara real time - jika Anda mencari banyak data, Anda dapat untuk mendapatkan kembali data tanpa mengganggu pengetikan pengguna. saya pikir umumnya orang menggunakan pencarian ini dengan mengetik dari huruf pertama yang mereka cari - saya menerima akan ada kesalahan ejaan - Anda dapat menerapkan pemeriksa ejaan setelah setiap spasi yang mereka tekan mungkin untuk mengatasinya. Atau simpan penelusuran yang dijalankan dan lihat kesalahan ejaan dan ubah kode untuk menanganinya berdasarkan pemetaan (atau dalam FTS menggunakan tesaurus khusus.)

Peringkat akan menjadi masalah pengembangan yang menyenangkan untuk bisnis apa pun; apakah Anda menemukan hasil pertama untuk Bingkai Gunung -atau apakah Anda ingin menimbangnya berdasarkan penjualan atau harga? Jika pengguna mengetik lebih dari satu istilah teks, Anda dapat menggunakan FTS untuk menghasilkan peringkat berdasarkan string pencarian.

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

Ini mengembalikan 30 baris; dan bobot berdasarkan teks yang dimasukkan pengguna untuk menentukan rekor tempat pertama. Dalam kedua kasus tersebut, Anda mungkin ingin menambahkan peringkat berkode untuk menyesuaikan hasil agar sesuai dengan keinginan bisnis Anda - peringkat widget dengan harga tertinggi 1 mungkin bukan cara yang tepat. Itulah sebabnya Anda akan menyimpan apa yang dicari / diklik orang sehingga Anda dapat menganalisis hasilnya nanti.

Ada pengurai bahasa yang sangat bagus untuk .Net yang menerjemahkan kueri string gaya google yang dimasukkan ke dalam bahasa FTS'able yang memberikan keakraban untuk setiap penelusuran boolean yang menggunakan situs Anda.

Anda mungkin juga ingin menambahkan beberapa kebijaksanaan fitur crowds dengan mengaudit masukan pengguna dan akhirnya mengunjungi dan menggunakan peta sukses untuk mengubah saran akhir agar benar-benar relevan bagi pengguna.

Sebagai saran terakhir jika ini adalah situs web komersial, Anda mungkin ingin melihat Easyask yang merupakan prosesor bahasa alami yang hebat dan menakutkan



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server lintas basis data alias

  2. Bagaimana cara menggabungkan banyak baris dengan id yang sama di sql?

  3. Trik Cepat dan Terbaik Untuk Pemulihan File MDF SQL Server

  4. Di mana upaya koneksi SQL Server dicatat?

  5. Menulis CTE Rekursif menggunakan sintaks Entity Framework Fluent atau sintaks Inline