Có, bạn có thể hợp nhất chúng rất tốt bằng cách sử dụng công cụ tìm kiếm như Apache Lucene và Solr.
http://lucene.apache.org/solr/
Nếu bạn cần phải làm điều đó chỉ trong MySQL, bạn có thể làm điều này với một UNION. Có thể bạn sẽ muốn chặn mọi kết quả không liên quan.
Bạn cần quyết định cách bạn muốn ảnh hưởng đến mức độ liên quan tùy thuộc vào bảng nào phù hợp.
Ví dụ: giả sử bạn muốn các bài viết quan trọng nhất, các sự kiện trở nên quan trọng và các trang ít quan trọng nhất. Bạn có thể sử dụng số nhân như thế này:
set @articles_multiplier=3;
set @events_multiplier=2;
set @pages_multiplier=1;
Dưới đây là một ví dụ làm việc bạn có thể thử thể hiện một số kỹ thuật:
Tạo dữ liệu mẫu:
create database d;
use d;
create table articles (id int primary key, content text) ENGINE = MYISAM;
create table events (id int primary key, content text) ENGINE = MYISAM;
create table pages (id int primary key, content text) ENGINE = MYISAM;
insert into articles values
(1, "Lorem ipsum dolor sit amet"),
(2, "consectetur adipisicing elit"),
(3, "sed do eiusmod tempor incididunt");
insert into events values
(1, "Ut enim ad minim veniam"),
(2, "quis nostrud exercitation ullamco"),
(3, "laboris nisi ut aliquip");
insert into pages values
(1, "Duis aute irure dolor in reprehenderit"),
(2, "in voluptate velit esse cillum"),
(3, "dolore eu fugiat nulla pariatur.");
Làm cho nó tìm kiếm:
ALTER TABLE articles ADD FULLTEXT(content);
ALTER TABLE events ADD FULLTEXT(content);
ALTER TABLE pages ADD FULLTEXT(content);
Sử dụng UNION để tìm kiếm tất cả các bảng sau:
set @target='dolor';
SELECT * from (
SELECT
'articles' as 'table_name', id,
@articles_multiplier * (MATCH(content) AGAINST (@target)) as relevance
from articles
UNION
SELECT
'events' as 'table_name',
id,
@events_multiplier * (MATCH(content) AGAINST (@target)) as relevance
from events
UNION
SELECT
'pages' as 'table_name',
id,
@pages_multiplier * (MATCH(content) AGAINST (@target)) as relevance
from pages
)
as sitewide WHERE relevance > 0;
Kết quả:
+------------+----+------------------+
| table_name | id | relevance |
+------------+----+------------------+
| articles | 1 | 1.98799377679825 |
| pages | 3 | 0.65545331108093 |
+------------+----+------------------+
Về mặt logic, đây có vẻ là một nơi tốt để sử dụng công đoàn và các lựa chọn phụ phù hợp với; nhưng tôi chưa bao giờ sử dụng nó để tìm kiếm theo cách này; vì vậy tôi nghi ngờ đây là cách tốt nhất. – xQbert
sẽ có cách nào để bạn cân nhắc mức độ phù hợp? chỉ đơn giản là nhân – bowlerae
Tôi băn khoăn về việc chuẩn hóa mức độ liên quan cao nhất đến 1 nhưng vẫn ném kết quả trên nhiều bảng – michael