2008-08-29 76 views
54

Tôi muốn thực hiện chức năng tìm kiếm cho một trang web (giả sử nó tương tự như SO). Tôi không muốn sử dụng công cụ tìm kiếm của Google như thế.Làm cách nào để triển khai Chức năng tìm kiếm trong một trang web?

Câu hỏi của tôi là:

Làm cách nào để triển khai tính năng này?

Có hai phương pháp tôi biết:

  1. Tìm kiếm tất cả các cơ sở dữ liệu trong ứng dụng khi người dùng cung cấp cho truy vấn của mình.
  2. Lập chỉ mục tất cả dữ liệu tôi có và lưu trữ ở nơi khác và truy vấn từ đó (như những gì Google làm).

Bất kỳ ai có thể cho tôi biết đường đi nào? Những ưu và khuyết điểm là gì?

Tốt hơn, có cách nào tốt hơn để thực hiện việc này không?

Trả lời

33

Sử dụng Lucene,
http://lucene.apache.org/java/docs/

Apache Lucene là một hiệu suất cao, đầy đủ tính năng văn bản thư viện công cụ tìm kiếm viết hoàn toàn bằng Java. Nó là một công nghệ phù hợp cho hầu như bất kỳ ứng dụng nào yêu cầu tìm kiếm toàn văn bản, đặc biệt là nền tảng chéo.

Nó có sẵn trong java và .net. Nó cũng có sẵn trong php dưới dạng một mô-đun khung công tác zend.

Lucene thực hiện những gì bạn muốn (lập chỉ mục các mục được tìm kiếm), bạn phải theo dõi chỉ mục lucene nhưng tốt hơn nhiều so với thực hiện tìm kiếm cơ sở dữ liệu về hiệu suất. BTW, SO tìm kiếm được cung cấp bởi lucene. : D

+0

Nếu bạn đang xem xét Lucene, bạn nên thực sự nhìn vào dự án Solr. Hãy nghĩ về nó như Lucene như một dịch vụ – sclarson

4

Bạn có thể muốn xem xapian và giao diện người dùng omega. Về cơ bản nó là một bộ công cụ mà bạn có thể xây dựng chức năng tìm kiếm.

1

Cách tốt nhất để tiếp cận điều này sẽ phụ thuộc vào cách bạn xây dựng trang của mình.

Nếu chúng thường được tạo từ nhiều bản ghi khác nhau, thì phương pháp lập chỉ mục có thể cho kết quả tốt hơn trừ khi bạn đặt nhiều công việc vào việc xây dựng lại các trang trên cơ sở dữ liệu một cách hiệu quả bên.

Những bất lợi mà bạn có với cách tiếp cận lập chỉ mục là thời gian quay lại. Có nhiều cách giải quyết (như công cụ đồ họa của Google), nhưng chúng cũng phức tạp để có được quyền.

Nếu bạn đi với đường dẫn cơ sở dữ liệu, hãy lưu ý rằng hệ thống công cụ tìm kiếm hiện đại hoạt động tốt hơn nếu chúng có dữ liệu liên kết để xử lý, do đó việc tìm kiếm một hệ thống có thể hiểu liên kết giữa các trang trong cơ sở dữ liệu. .

0

Đây là phần trực giao với câu hỏi của bạn, nhưng tôi khuyên bạn nên sử dụng ý tưởng tìm kiếm RESTful. Nghĩa là, để thực hiện tìm kiếm chưa bao giờ được thực hiện, trang web sẽ gửi một truy vấn đến/tìm kiếm /. Để chạy lại tìm kiếm, trang web GET/search/{some id}

Có một số tài liệu hay được tìm thấy về vấn đề này, ví dụ: here.

(Điều đó nói rằng, tôi thích lập chỉ mục nếu có thể, mặc dù nó là một tối ưu hóa, và do đó có thể là quá sớm.)

-1

Nếu bạn ứng dụng sử dụng stack Java EE và bạn đang sử dụng Hibernate bạn có thể sử dụng Compass Framework duy trì chỉ mục có thể tìm kiếm của cơ sở dữ liệu của bạn. Khung Compass sử dụng Lucene dưới mui xe.

Điểm duy nhất là bạn không thể sao chép chỉ mục tìm kiếm của mình. Vì vậy, bạn cần phải sử dụng một cơ sở dữ liệu nhóm để giữ các bảng chỉ mục hoặc sử dụng các cơ chế lưu trữ chỉ mục dựa trên lưới mới hơn đã được thêm vào Khuôn khổ Compass 2.x.

1

Nếu bạn đang sử dụng Microsoft plattform, bạn có thể sử dụng dịch vụ Indexing. Điều này tích hợp rất easliy với các trang web IIS.

Nó có tất cả các tính năng cơ bản như tìm kiếm văn bản đầy đủ, xếp hạng, exlcude và bao gồm các loại tệp nhất định và bạn có thể thêm thông tin meta của riêng mình cũng như thông qua thẻ meta trong các trang html.

Làm một google và bạn sẽ tìm thấy tấn!

30

Tùy thuộc vào mức độ toàn diện của trang web của bạn và số tiền bạn muốn tự làm.

Nếu bạn đang chạy một một trang web nhỏ mà không cần khả năng hơn nữa để thêm một tìm kiếm tùy chỉnh, hãy google làm việc (có thể thêm một sitemap) và sử dụng google custom search.

Nếu bạn chạy một trang web trung bình với công cụ sql sử dụng các tính năng tìm kiếm của động cơ sql của bạn.

Nếu bạn chạy một số phần mềm nặng chồng như J2EE hoặc Net sử dụng Lucene, một công cụ tìm kiếm mạnh mẽ lớn hoặc Net của bản sao lucene.Net

Nếu bạn muốn trừu tượng tìm kiếm của bạn từ ứng dụng của bạn và có thể truy vấn nó bằng ngôn ngữ trung lập với các API XML/HTTP và JSON, hãy xem solr. Solr chạy lucene trong nền, nhưng thêm một giao diện web đẹp cho nó.

+3

Tôi có một câu hỏi về điều này. Tôi có thể thực hiện tìm kiếm tùy chỉnh của Google cho trang web mạng nội bộ không? Nếu tôi làm điều này tôi có đặt công ty của mình vào tình trạng rủi ro không? Tôi không muốn viết logic của riêng mình. – Richie

+0

tìm kiếm tùy chỉnh của google đã bị giết btw. Microsoft có một thay thế với Bing tôi nghĩ. – demaniak

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