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

Làm cách nào để triển khai một tìm kiếm trang web đơn giản với php và mySQL?

Mọi người đều đề xuất tìm kiếm toàn văn bản MySQL, tuy nhiên bạn nên biết một cảnh báo LỚN. Công cụ tìm kiếm Fulltext chỉ có sẵn cho công cụ MyISAM (không phải InnoDB, công cụ được sử dụng phổ biến nhất do tính toàn vẹn tham chiếu và tuân thủ ACID).

Vì vậy, bạn có một số tùy chọn:

1. Cách tiếp cận đơn giản nhất được nêu ra bởi Cây hạt . Bạn có thể thực sự nhận được các tìm kiếm được xếp hạng từ SQL thuần túy (không có văn bản đầy đủ, không có gì cả). Truy vấn SQL bên dưới sẽ tìm kiếm một bảng và xếp hạng kết quả dựa trên số lần xuất hiện của một chuỗi trong các trường tìm kiếm:

SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

đã chỉnh sửa ví dụ của họ để cung cấp một chút rõ ràng hơn

Các biến thể của truy vấn SQL ở trên, thêm câu lệnh WHERE (WHERE p.body LIKE '% anything% you% want'), v.v. có thể sẽ mang lại cho bạn chính xác những gì bạn cần.

2. Bạn có thể thay đổi lược đồ cơ sở dữ liệu của mình để hỗ trợ toàn văn. Thông thường, những gì được thực hiện để giữ tính toàn vẹn của tham chiếu InnoDB, tuân thủ ACID và tốc độ mà không cần phải cài đặt các plugin như Sphinx Fulltext Search Engine đối với MySQL là chia dữ liệu trích dẫn thành bảng riêng của nó. Về cơ bản, bạn sẽ có một bảng Quotes là một bảng InnoDB, thay vì có trường TEXT của bạn là "dữ liệu", bạn có một tham chiếu "quote_data_id" trỏ đến ID trên bảng Quote_Data là một bảng MyISAM. Bạn có thể thực hiện đầy đủ văn bản của mình trên bảng MyISAM, kết hợp các ID được trả về với các bảng InnoDB của bạn và bạn đã có kết quả.

3. Cài đặt Sphinx . Chúc may mắn với cái này.

Với những gì bạn đã mô tả, tôi RẤT RẤT khuyên bạn nên thực hiện cách tiếp cận đầu tiên mà tôi đã trình bày vì bạn có một trang web điều khiển cơ sở dữ liệu đơn giản. Giải pháp thứ nhất rất đơn giản, hoàn thành công việc một cách nhanh chóng. Lucene sẽ là một khó khăn để thiết lập, đặc biệt nếu bạn muốn tích hợp nó với cơ sở dữ liệu vì Lucene được thiết kế chủ yếu để lập chỉ mục các tệp chứ không phải cơ sở dữ liệu. Tìm kiếm trang web tùy chỉnh của Google chỉ làm cho trang web của bạn mất đi rất nhiều danh tiếng (khiến bạn trông nghiệp dư và bị tấn công) và MySQL fulltext rất có thể sẽ khiến bạn thay đổi lược đồ cơ sở dữ liệu của mình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể đếm hai cột trong cùng một truy vấn không

  2. Tải hình ảnh lên máy chủ và lưu trữ đường dẫn hình ảnh trong cơ sở dữ liệu mysql

  3. Nhập các sự kiện trong javascript lịch đầy đủ từ cơ sở dữ liệu

  4. Tôi muốn một trình kích hoạt để XÓA khỏi 2 bảng trong MySQL

  5. Mysql Không thể thực hiện kết nối vì máy mục tiêu đã chủ động từ chối nó