В этом случае вам необязательно нужны подвыборы.Вы можете использовать siply:
SELECT id, str
FROM item_strings
WHERE str LIKE '%term%'
AND str LIKE '%another_term%'
AND str LIKE '%a_much_deeper_term%'
... но также возникает хороший вопрос: порядок, в котором вы исключаете строки.Я предполагаю, что MySQL достаточно умен, чтобы предположить, что самый длинный термин будет самым строгим, поэтому, начиная с a_much_deeper_term
, он удалит большинство записей, а затем выполнит дополнительное сравнение только в нескольких строках.- В противоположность этому, если вы начнете с term
, вы, вероятно, получите множество возможных записей, тогда вам придется сравнивать их со списком терминов.
Интересно то, что вы можете форсировать ордерв котором сравнение производится с использованием вашего исходного примера subselect .Это дает возможность принять решение, какой термин является наиболее ограничивающим, основываясь на большем числе хана, только на длине, но, например:
- отношение согласных к гласным
- самая длинная цепьсогласных слова
- наиболее часто используемых гласных в слове
... и т. д.Вы также можете применить эвристику в зависимости от типа текстовой информации, с которой вы работаете.
Редактировать:
Это всего лишь догадка, но этоможет быть возможно применить LIKE
к words
в самом полнотекстовом индексе.Затем сопоставьте строки с индексом, как если бы вы указали полные слова.
Я не уверен, что это на самом деле сделано, но это было бы разумным решением для пользователей MySQL.Также обратите внимание, что эту теорию можно использовать только в том случае, если все возможные вхождения фактически находятся в полнотекстовом поиске.Для этого вам необходимо:
- Ваш шаблон поиска должен быть по крайней мере размером с максимальную длину слова.(Если вы ищете, например,
%id%
, то он также может быть частью трехбуквенного слова, которое по умолчанию исключено из индекса FULLTEXT). - Ваш шаблон поиска не должен быть подстрокой любого из перечисленныхисключаемое слово, например: и, и т. д.
- Ваш шаблон не должен содержать никаких специальных символов.