PHP MySQL Поиск и порядок по релевантности - PullRequest
11 голосов
/ 05 декабря 2008

Я знаю, как сделать обычный поиск php mysql и отобразить результаты. Однако из-за характера того, что я пытаюсь достичь, мне нужно уметь сортировать по релевантности. Позвольте мне объяснить это лучше:

Обычный запрос «приложения Apple iphone» будут искать в базе данных, используя% Apple Iphone Application%, но если нет записей, которые отображают эту фразу в этом точном порядке, поиск ничего не даст.

Что мне в основном нужно сделать, так это искать «яблоко», «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]

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

Ответы [ 5 ]

7 голосов
/ 05 декабря 2008

взгляните на MySQL FULLTEXT функции поиска , Они должны автоматически возвращать результаты по релевантности и давать вам гораздо больший контроль над вашими поисками

Единственная потенциальная проблема с использованием полнотекстовых индексов заключается в том, что они не поддерживаются таблицами InnoDB.

6 голосов
/ 05 декабря 2008

Быстрый гугл дал мне эту ссылку .

Пример:

select title, match (title,content) against (”internet”) as score 
from cont 
where match (title,content) against (”internet”) limit 10;
4 голосов
/ 11 марта 2015

Может быть, это кому-нибудь поможет (упорядочить по релевантности и вести подсчет слов):

Нет полного текста:

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;
1 голос
/ 05 декабря 2008
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

В наборе результатов будет поле "релевантность", которое используется здесь для сортировки результатов.

0 голосов
/ 08 апреля 2017

Я не Что именно вы хотите, но следующий код определенно работает для вас.

SELECT ("some text here" or `column_name`) RLIKE "Apple|Iphone|Application" AS Result ORDER BY Result DESC;

Разделяйте все слова чертой (|), но результаты будут 1 или 0 основаны или нет соответственно. Если вы хотите получить обоснованные строки, см. Ниже.

SELECT * FROM "table_name" WHERE `column_name` RLIKE "Apple|Iphone|Application";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...