2009-03-05 35 views
9

OK Tôi có một cơ sở dữ liệu mySQL trông giống nhưToàn văn có tìm kiếm câu trả lời không?

ID này - một int và ID duy nhất của các ghi

Tiêu đề - Tên của mục

Mô tả - Các mục mô tả

Tôi muốn tìm kiếm cả tiêu đề và mô tả từ khóa, hiện tại tôi đang sử dụng.

SELECT * Từ 'mục' mà tên sách NHƯ% key%

Và công trình này và như không có nhiều trong cơ sở dữ liệu, như tuy nhiên tìm kiếm “chìa khóa này” không tìm thấy “này quan trọng mà "Tôi muốn cải thiện công cụ tìm kiếm của trang web, và thậm chí có thể thêm một số loại hệ thống xếp hạng cho nó (nhưng đó là một thời gian dài đi). Vì vậy, với câu hỏi, tôi đã nghe nói về một cái gì đó gọi là "tìm kiếm toàn văn" nó là (theo như tôi có thể nói) một yếu của thiết kế cơ sở dữ liệu, nhưng là một Newby cho chủ đề này tôi không biết gì về nó như vậy …

1) Bạn có nghĩ nó sẽ hữu ích không?

Và một questron thêm ...

2) Điều gì tôi có thể đọc về thiết kế cơ sở dữ liệu thiết kế/công cụ tìm kiếm sẽ chỉ cho tôi đi đúng hướng.

Nếu đó là sự phù hợp các trang web hiện đang viết bằng stright PHP (IE mà không có một khuôn khổ) (xuyên suy nghĩ về chuyển đổi nó sang Ruby on Rails đã vượt qua tâm trí của tôi)

cập nhật

Cảm ơn tất cả, tôi sẽ đi tìm kiếm Fulltext. Và đối với bất kỳ ai tìm thấy điều này sau, tôi cũng tìm thấy một số tutorial tốt trên tìm kiếm toàn văn.

Trả lời

9

Vấn đề với tìm kiếm loại '% keyword%' là không có cách nào để tìm kiếm hiệu quả trên bảng thông thường, ngay cả khi bạn tạo chỉ mục trên cột đó. Hãy suy nghĩ về cách bạn sẽ tìm kiếm chuỗi đó trong danh bạ điện thoại. Thực sự không có cách nào để tối ưu hóa nó - bạn phải quét toàn bộ danh bạ điện thoại - và đó là những gì MySQL làm, quét toàn bộ bảng.

Nếu bạn thay đổi tìm kiếm đó thành 'từ khóa%' và sử dụng chỉ mục, bạn có thể tìm kiếm rất nhanh. Nghe có vẻ như đây không phải là những gì bạn muốn, mặc dù.

Vì vậy, với ý nghĩ đó, tôi đã sử dụng lập chỉ mục toàn văn/tìm kiếm khá một chút, và đây là một vài ưu và nhược điểm:

Ưu

  • Rất nhanh
  • Returns kết quả được sắp xếp theo độ liên quan (theo mặc định, mặc dù bạn có thể sử dụng bất kỳ cách sắp xếp nào)
  • Từ dừng có thể được sử dụng.

Nhược điểm

  • Chỉ làm việc với các bảng MyISAM
  • Words đó là quá ngắn sẽ được bỏ qua (tối thiểu mặc định là 4 chữ cái)
  • Yêu cầu SQL khác nhau trong mệnh đề where, vì vậy bạn sẽ cần phải sửa đổi các truy vấn hiện có.
  • Không phù hợp chuỗi từng phần (ví dụ, 'từ' không phù hợp 'từ khoá', chỉ 'từ')

Here is some good documentation on full-text searching.

Tùy chọn khác là sử dụng hệ thống tìm kiếm như Sphinx. Nó có thể cực kỳ nhanh và linh hoạt. Nó được tối ưu hóa để tìm kiếm và tích hợp tốt với MySQL.

+0

Cảm ơn, tôi đã sử dụng một thứ gì đó giống như Sphinx, nhưng thành thật mà nói, trừ khi nó sẽ mất một khoảng thời gian, tôi sẽ tự xây dựng nó theo cách tôi hiểu nó hoạt động như thế nào. –

+0

chúng tôi đang tiến gần đến việc thực hiện nhân sư trong một trong các ứng dụng của chúng tôi. chúng tôi tìm kiếm nặng trên một tấn dữ liệu. chúng tôi đã sử dụng tìm kiếm toàn văn trong một thời gian, nhưng cần thiết để chuyển sang innodb cho các giao dịch. Nhưng, fulltext dễ thực hiện và thực sự nhanh. – jonstjohn

1

Bạn cũng có thể xem xét Zend_Lucene. Nó dễ dàng tích hợp hơn Sphinx, bởi vì nó là PHP thuần túy.

+0

sẽ không đề xuất rằng vì nó prety chậm – deresh

2

Tôi đoán rằng toàn văn MySQL là đủ cho nhu cầu của bạn, nhưng đáng lưu ý rằng hỗ trợ được xây dựng không quy mô rất tốt. Đối với tài liệu kích thước trung bình, nó bắt đầu trở nên không thể sử dụng cho các kích thước bảng nhỏ đến vài trăm nghìn hàng. Nếu bạn nghĩ rằng điều này có thể trở thành một vấn đề hơn nữa về bạn có lẽ nên nhìn vào Sphinx rồi. Nó trở thành tiêu chuẩn defacto cho người dùng MYSQL, mặc dù cá nhân tôi thích thực hiện giải pháp của riêng tôi bằng cách sử dụng java lucene. :)

Ngoài ra, tôi muốn đề cập đến tìm kiếm văn bản đầy đủ về cơ bản là khác với tiêu chuẩn LIKE '% keyword%' - tìm kiếm. Không giống như chỉ mục văn bản đầy đủ của tìm kiếm LIKE cho phép bạn tìm kiếm một số từ khóa không xuất hiện ngay cạnh nhau. Ví dụ, các công cụ tìm kiếm chuẩn như google là công cụ tìm kiếm văn bản đầy đủ.

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