Я знаю, как выполнять регулярный поиск php mysql и отображать результаты. Однако из-за характера того, что я пытаюсь выполнить, мне нужно иметь возможность сортировать по релевантности. Позвольте мне объяснить это лучше:
Обычный запрос «приложения Apple iphone» будет искать базу данных с помощью приложения% apple iphone%, но если нет записей, которые отображают эту фразу в этом точном порядке, поиск ничего не даст.
Мне в основном нужно искать «яблоко», «iphone» и «приложения» по отдельности, а затем объединять результаты в один, а затем мне нужно оценивать релевантность, сколько экземпляров слова найдено в записях , Например, если бы я сделал то, что хотел, и он вернул их следующим образом:
Iphone Applications From Apple Apple Make The Best Apple Iphone Applications Iphone Applications
Они будут оцениваться следующим образом:
Apple Make The Best Apple Iphone Applications Iphone Applications From Apple Iphone Applications
Из-за того, сколько экземпляров поисковых терминов найдено. См. Раздел:
[Apple] Make The Best [Apple] [Iphone] [Applications] [Iphone] [Applications] From [Apple] [Iphone] [Applications]
Надеюсь, я объяснил это достаточно хорошо, и я был бы очень благодарен, если бы кто-нибудь мог дать мне какие-либо указания.
взгляните на функции поиска MySQL FULLTEXT , они должны автоматически возвращать результаты по релевантности и давать вам гораздо больше контроля над вашими поисковыми запросами
Единственная потенциальная проблема с использованием полнотекстовых индексов заключается в том, что они не поддерживаются таблицами InnoDB.
Быстрый google дал мне эту ссылку .
Пример:
select title, match (title,content) against (”internet”) as score from cont where match (title,content) against (”internet”) limit 10;
Может быть, это может помочь кому-то (упорядочить по релевантности и сохранить количество слов):
Нет полнотекстового текста:
SELECT *, ( (value_column LIKE '%rusten%') + (value_column LIKE '%dagen%') + (value_column LIKE '%bezoek%') + (value_column LIKE '%moeten%') ) as count_words FROM data_table WHERE (value_column LIKE '%dagen%' OR value_column LIKE '%rusten%' OR value_column LIKE '%bezoek%' OR value_column LIKE '%moeten%') ORDER BY count_words DESC
Полный текст:
SELECT * FROM data_table WHERE MATCH(value_column) AGAINST('+dagen +rusten +bezoek +moeten' IN BOOLEAN MODE) ORDER BY MATCH(value_column) AGAINST('+dagen +rusten +bezoek +moeten' IN BOOLEAN MODE) DESC;
SELECT field2, field3, ..., MATCH(field1, field2) AGAINST ("search string") AS relevance WHERE MATCH(field1, field2) AGAINST "search string" ORDER BY relevance DESC LIMIT 0,10
В результирующем наборе будет поле «релевантность», которое используется здесь для сортировки результатов.
Я не хочу, что именно вы хотите, но следующий код определенно работает для вас.
SELECT ("some text here" or `column_name`) RLIKE "Apple|Iphone|Application" AS Result ORDER BY Result DESC;
Отделите все слова с помощью Bar (|), но результаты будут основаны на 1 или 0 или нет. Если вы хотите получить основанные строки, см. Ниже.
SELECT * FROM "table_name" WHERE `column_name` RLIKE "Apple|Iphone|Application";