Как искать для получения «лучшего» результата - PullRequest
0 голосов
/ 17 июня 2010

предположим, что кто-то вводит этот поиск (в форме):

Nicole Kidman films

Какой SQL я могу использовать, чтобы найти "лучшие" результаты?

Полагаю, что-то вроде этого:

SELECT * FROM myTable WHERE ( Field='%Nicole Kidman Films%' OR Field='%Nicole%' OR Field='%Kidman%' OR Field='%Films%' ) 

Мой вопрос: как получить наиболее значимый результат? Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Полнотекстовый поиск :

SELECT * FROM myTable WHERE MATCH(Field) AGAINST('Nicole Kidman Films')

Этот запрос будет возвращать строки в порядке релевантности, как определено алгоритмом полнотекстового поиска.

Примечание. Это для MySQL, другие СУБД имеют аналогичную функциональность.

2 голосов
/ 17 июня 2010

То, что вы ищете, часто называют «полнотекстовым поиском» или «поиском на естественном языке».К сожалению, это не стандартный SQL.Вот учебник о том, как сделать это в mysql: http://devzone.zend.com/article/1304

Вы сможете найти примеры для других механизмов баз данных.

0 голосов
/ 17 июня 2010

В SQL знак равенства не поддерживает подстановочные знаки в нем - ваш запрос действительно должен быть:

SELECT * 
  FROM myTable 
 WHERE Field LIKE '%Nicole Kidman Films%' 
    OR Field LIKE '%Nicole%' 
    OR Field LIKE '%Kidman%' 
    OR Field LIKE '%Films%'

Но подстановочный знак в левой части не будет использовать индекс, если он существует.

Лучшим подходом является использование полнотекстового поиска, который изначально предоставляется большинством баз данных, но есть сторонние поставщики, такие как Sphinx.Каждый из них имеет свой собственный алгоритм для присвоения рейтинга / оценки на основе критериев, по которым выполняется поиск, для отображения того, что алгоритм считает наиболее актуальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...