У меня есть три таблицы, каждая из которых имеет столбец с полнотекстовым индексом. Пользователь вводит условия поиска в одно текстовое поле, а затем будут выполняться поиск по всем трем таблицам.
Это лучше объяснить на примере:
documents
doc_id
name FULLTEXT
table2
id
doc_id
a_field FULLTEXT
table3
id
doc_id
another_field FULLTEXT
(я понимаю, что это выглядит глупо, но это потому, что я удалил все остальные поля и таблицы, чтобы упростить его).
Таким образом, в основном я хочу выполнить полнотекстовый поиск по name
, a_field
и another_field
, а затем показать результаты в виде списка documents
, предпочтительно с указанием причины, по которой был найден этот документ, например, если another_field
соответствует, я бы отобразил, что такое another_field
.
Я начал работать над системой, в которой выполняются три полнотекстовых поисковых запроса и результаты вставляются в таблицу со структурой, подобной:
search_results
table_name
row_id
score
(позже это можно сделать для кэширования результатов на несколько дней, например, с помощью хэша поисковых терминов).
У этой идеи две проблемы. Во-первых, один и тот же документ может быть в результатах поиска до трех раз с разными баллами. Вместо этого, если поисковый термин сопоставляется в двух таблицах, он должен иметь один результат, но более высокий балл.
Во-вторых, анализ результатов затруднен. Я хочу отобразить список документов, но не сразу знаю doc_id
без какого-либо соединения; однако таблица, к которой нужно присоединиться, зависит от столбца table_name
, и я не уверен, как этого добиться.
Желание искать несколько похожих таблиц должно быть обычным делом, поэтому я думаю, что я спрашиваю, правильно ли я подхожу к этому? Может кто-нибудь сказать мне лучший способ сделать это, пожалуйста.