PHP MySQL Поиск и заказ по релевантности

Я знаю, как выполнять регулярный поиск 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] 

Надеюсь, я объяснил это достаточно хорошо, и я был бы очень благодарен, если бы кто-нибудь мог дать мне какие-либо указания.

Solutions Collecting From Web of "PHP MySQL Поиск и заказ по релевантности"

взгляните на функции поиска 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";