Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thủ tục được lưu trữ T-SQL để trả về kết quả tìm kiếm được đề xuất theo phong cách google

Tôi sẽ đề xuất tìm kiếm toàn văn (MS 'hoặc Lucene sẽ hoạt động) Đoạn mã dưới đây sử dụng MSSQL FTS làm mã mà tôi sử dụng trong ứng dụng của mình vào lúc này.

Cài đặt Tìm kiếm FTS nếu bạn chưa cài đặt. Nếu bạn đã kiểm tra dịch vụ đang chạy. Trong phòng thu quản lý, hãy chạy điều này để thiết lập danh mục và thêm bảng sản phẩm; và Màu / Tên / Số sản phẩm vào danh mục.

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

Sau đó, bạn có thể chạy các truy vấn đối với tất cả các cột cùng một lúc; ví dụ. Bạc (Được chọn theo màu và tên)

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

* Trên truy vấn sẽ tìm thấy Silver * để bạn có thể sử dụng nó để tạo kết quả khi người dùng nhập vào. Một điều cần xem xét là google làm cho điều này hoạt động trong thời gian thực - nếu bạn đang tìm kiếm nhiều dữ liệu, bạn có thể để lấy lại dữ liệu mà không làm gián đoạn quá trình nhập của người dùng. tôi nghĩ nói chung mọi người sử dụng các tìm kiếm này bằng cách nhập từ chữ cái đầu tiên họ đang tìm kiếm - tôi chấp nhận rằng sẽ có lỗi chính tả - bạn có thể triển khai trình kiểm tra chính tả sau mỗi dấu cách mà họ nhấn có lẽ để xử lý điều đó. Hoặc lưu trữ các tìm kiếm đang chạy và xem các lỗi chính tả và thay đổi mã để xử lý dựa trên ánh xạ (hoặc trong FTS sử dụng từ đồng nghĩa tùy chỉnh.)

Xếp hạng sẽ là một vấn đề phát triển thú vị đối với bất kỳ doanh nghiệp nào; bạn đang tìm kiếm kết quả đầu tiên cho Mountain Frame - hay bạn muốn tính theo doanh số hoặc giá cả? Nếu người dùng nhập nhiều hơn một cụm từ văn bản, bạn có thể sử dụng FTS để tạo xếp hạng dựa trên chuỗi tìm kiếm.

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

Điều này trả về 30 hàng; và trọng số dựa trên văn bản người dùng nhập vào để xác định bản ghi vị trí đầu tiên. Trong cả hai trường hợp, bạn có thể sẽ muốn thêm xếp hạng được mã hóa để điều chỉnh kết quả cho phù hợp với mong muốn kinh doanh của mình - xếp hạng tiện ích con có giá cao nhất 1 có thể không phải là cách. Đó là lý do tại sao bạn sẽ lưu trữ những gì mọi người đã tìm kiếm / nhấp vào để bạn có thể phân tích kết quả sau này.

Có một trình phân tích cú pháp ngôn ngữ rất hay for .Net dịch truy vấn chuỗi kiểu google được nhập sang ngôn ngữ FTS'able, mang lại sự quen thuộc cho bất kỳ tìm kiếm boolean nào sử dụng trang web của bạn.

Bạn cũng có thể muốn thêm một số tính năng thông minh của đám đông bằng cách kiểm tra những gì người dùng đã nhập và cuối cùng đã truy cập và sử dụng bản đồ thành công để thay đổi các đề xuất cuối cùng để thực sự làm cho chúng phù hợp với người dùng.

Như một gợi ý cuối cùng nếu đây là một trang web thương mại, bạn có thể muốn xem Easyask đó là một bộ xử lý ngôn ngữ tự nhiên tuyệt vời đáng sợ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn SQL để chuyển đổi định dạng ngày sang định dạng khác

  2. Các cách tốt nhất để sử dụng câu lệnh SQL DELETE trong bảng SQL

  3. Cách sao lưu tệp SQL Server 2014 Express Localdb (.mdf) theo chương trình

  4. Cách thoát đúng các số nhận dạng được phân tách trong SQL Server mà không sử dụng QUOTENAME

  5. Bỏ qua một số cột trong SqlBulkCopy