У меня есть две таблицы в данный момент:MySql Заказанный Поиск по ключевой фразе
search_matches:
match_id (int) <-- primary key
parent_id (int) <-- foreign-key
word_id (int) <-- foreign-key (to a table filled with words that are unique and have an id)
pos (int) <-- the position of the word in the block of text it comes from
search_words: (обновление)
word_id (int) <-- primary key
word (varchar ...) <-- the word
(я использую InnoDB, и мой хозяин выиграл» t update mysql, так что полный текст отсутствует)
Я бы хотел, чтобы мои пользователи могли выполнять поиск с использованием ". arch для «foo bar».
Я думал несколько способов сделать это, но не менее интенсивно, как представляется, добавив еще один столбец:
next_pos (int)
я мог тогда сделать
(SELECT * FROM table WHERE word_id='foo') as foo
INNER JOIN (SELECT * FROM table WHERE word_id='bar') AS bar
ON (
foo.parent_id=bar.parent_id AND
foo.next_pos=bar.next_pos
)
Это происходит за счет хранения дополнительного столбца и внутреннего соединения для каждого слова за пределами первого, но его лучший вариант, который я придумал до сих пор. (Идея, предшествующая этому, была меньше, чем колонка, но мне нужно было выполнить операцию добавления в блоке ON, что-то, что я считал слишком дорогостоящим, так как мой сайт растет.
Это мой лучший вариант, или есть другой ? там я все еще просто играть в постановке, так что теперь пришло время внести изменения
Update 1:.
Я сейчас рассматривает возможность использования таблицы ключевых слов, чтобы сузить свой поиск, а затем с помощью как на этом, а не на нескольких объединениях, поскольку это может быть еще быстрее и значительно устраняет необходимость объединения. Просто не было бы продуктивным делать по всей моей базе данных.
Таблица уникальных значений - это просто первичный автоматически увеличивающий ключ (word_id) с другим столбцом (словом), который имеет текст.{1: некоторые, 2: текст, 3: с, 4: foo, 5: и, 6: также, 7: bar} Слова не повторяются. Я беспокоюсь, может быть, слишком дорого. – Kirk
@Kirk Но если вам нужно искать по значимым подстрокам полного контента, нет никакого способа сделать это только с помощью словаря всех миров в содержании, если вы не знаете, что слова никогда не повторятся в этом контенте. –
Есть две таблицы ... один словарь. Другой содержит ссылки на словарь с положением слова в тексте, из которого он поступает (pos) – Kirk