2010-06-16 3 views
0

предположим, что кто-то войти в этот поиск (по форме):Как искать для получения результата «лучший»

Nicole Kidman films 

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

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

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

Мой вопрос заключается в том, как получить наиболее подходящий результат? Большое спасибо!

+1

Определить «наиболее релевантные». –

+1

Скажите, что означает «лучший» и «самый релевантный», и как рассчитать их, и я дам вам ответ. – Oded

+0

вы правы .. но я абсолютно не знаю аргументации. – stighy

ответ

2

Full-Text Search:

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

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

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

+0

T H A N K Y O U V E R Y M U C H ... я абсолютно не знал об этом! Замечательно .. – stighy

2

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

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

0

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

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

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

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