2011-12-15 41 views
9

Tôi cần phải tìm kiếm một tập hợp các câu có tiềm năng lớn và tôi không biết bắt đầu từ đâu.Viết thuật toán tìm kiếm toàn văn bản trong C#/Entity Framework - bắt đầu từ đâu?

Tóm lại, người dùng sẽ gửi cụm từ tìm kiếm, ví dụ "làm cách nào để xóa tài khoản của tôi", sau đó tôi cần chuyển đến db và thực hiện đối sánh với các từ được cung cấp.

Tại thời điểm này tôi đang nghĩ đến việc làm một cái gì đó như sau: cụm từ

  • Split tới từ riêng lẻ
  • Hủy bỏ từ rất phổ biến (và, nếu, vv)
  • Bằng cách nào đó đặt hàng từ bằng cách ưu tiên (không có ý tưởng làm thế nào để làm điều này được nêu ra)
  • Sử dụng vòng lặp EF qua các từ, thực hiện một String.Contains trên mỗi db bản ghi và từ
  • Nếu không tìm thấy kết quả, hãy xóa một số Nói cách ưu tiên wer và tìm kiếm một lần nữa
  • Lặp lại

bất cứ ai có thể chỉ cho tôi đi đúng hướng? Ngoài ra, nếu có ai biết bất kỳ thư viện nào để thực hiện loại công việc này sẽ tuyệt vời.

Cheers

+5

Bạn có thực sự muốn viết tìm kiếm toàn văn hoặc đang sử dụng đủ không? Nếu sử dụng nó là đủ, bạn có thể ném Lucene.net vào vấn đề. – CodesInChaos

+0

Tôi sẽ sử dụng nhiều hơn một quyền – jcvandan

+0

Tuy nhiên, tôi muốn tìm kiếm xảy ra trong SQL nếu có thể, tôi không thực sự muốn trả lại toàn bộ bản ghi bao giờ tôi cần tìm kiếm – jcvandan

Trả lời

6

Đối với ưu tiên từ, giải pháp đơn giản nhưng khá hiệu quả là sắp xếp chúng theo sự nổi tiếng của họ (có lẽ chỉ số phổ biến có thể được tạo dựa trên bài viết trong cơ sở dữ liệu của bạn), vì vậy mà từ đó rất hiếm trong các văn bản của bạn quan trọng hơn, theo cách này bạn có thể tăng cường các từ ít chung chung hơn.

Vấn đề khác ở đây là thực tế, bạn có thể có các từ ở các dạng khác nhau, như quá khứ/tương lai, do đó bạn có thể quan tâm đến stemming chúng, một công cụ được chuyển sang C# là dự án Snowball. .

Đối với phần thứ hai của vấn đề của bạn, lặp qua các từ có thể rất không hiệu quả, tôi nghĩ bạn nên cân nhắc sử dụng một số thư viện/giải pháp lập chỉ mục. Một, phổ biến cho .net là Lucene.Net. Về cơ bản nó tạo ra chỉ số đảo ngược, ánh xạ các cụm từ nhất định (như từ) cho các bài viết chứa chúng, cho phép bạn nhanh chóng tìm thấy tất cả các lần xuất hiện của các từ đã cho trong văn bản của bạn. Việc tiếp cận tương tự có thể được thực hiện bởi chính bạn bên trong cơ sở dữ liệu của bạn

+0

im sẽ xem xét lucene, xem liệu nó có phù hợp hay không, thx – jcvandan

2

Sử dụng SQL server full text search capability và bọc truy vấn bằng cách sử dụng tìm kiếm toàn văn để lưu trữ thủ tục. Thực hiện các thủ tục được lưu trữ thông qua ADO.NET hoặc EF.

3

Chỉ trong trường hợp bất kỳ ai gặp phải điều này và tự hỏi những gì tôi đã sử dụng cuối cùng, tôi đã sử dụng Lucene.NET. Thật tuyệt vời, rất dễ thiết lập và sử dụng xem xét nó rất mạnh mẽ và bổ sung thêm chức năng tuyệt vời như vậy. Một điều tôi sẽ nói mặc dù là tài liệu không phải là tuyệt vời. Tuy nhiên, tôi đã tìm thấy một loạt các hướng dẫn here đó là một giới thiệu tốt. Tôi đã dành một buổi sáng đi qua các bài báo này và tôi đã nhanh chóng lập chỉ mục/tìm kiếm toàn văn nhanh chóng một cách lố bịch trong ứng dụng của mình!

+3

Nếu vấn đề của bạn đã được giải quyết do nỗ lực của @Ravadre, bạn nên cân nhắc đánh dấu câu trả lời được cung cấp là chính xác, chứ không phải báo cáo thành công cuối cùng. Điều này phần thưởng cho họ trong thời gian họ đưa vào giúp bạn tìm thấy giải pháp này. Nếu không, bạn chỉ cần vỗ nhẹ vào lưng bạn để giúp đỡ người khác. : -o – BenSwayne

+0

yeh đúng, không biết tại sao tôi đã làm điều đó ?! – jcvandan

Các vấn đề liên quan