SQL Содержит таблицу и положение Keword в строке - PullRequest
1 голос
/ 10 мая 2011

Есть вопрос о полнотекстовом поиске.

У меня есть запрос, который работает, но я хочу улучшить его. Например, предположим, что я ищу «лучшее решение». В моем результате (используя FTS, CONTAINSTABLE, NEAR, ISABOUT, *) у меня есть столбцы rank, id, string :

rank| id | string
----+----+-------
430 | 33 | my own best solution
430 | 32 | the way for best solution
430 | 30 | the best solution sample
430 | 31 | best solution 
430 | 34 | best solution creation how
300 | 40 | usefull best software solution
300 | 41 | best software solution
200 | 50 | wolrds bests solutions
200 | 51 | bests solutions of the world

Так что этот запрос на 100% мне подходит, и все RANK верны, но я хочу сделать этот запрос более актуальным.

Если позиция ключевого слова в строке больше слева, оно должно появиться раньше в результате. Например:

rank| id | string
----+----+-------
430 | 31 | best solution 
430 | 34 | best solution creation how
430 | 30 | the best solution sample
430 | 33 | my own best solution
430 | 32 | the way for best solution
300 | 41 | best software solution
300 | 40 | usefull best software solution
200 | 51 | bests solutions of the world
200 | 50 | wolrds bests solutions

Возможно ли это? Если так, как я могу получить этот результат?

Ответы [ 2 ]

2 голосов
/ 10 мая 2011

Вам нужна функция indexOf.Найдите в руководстве по SQL похожую функцию.

Затем добавьте критерии сортировки, выглядящие как ORDER BY rank, CASE indexOf(string, 'best') WHEN -1 THEN 100000 ELSE indexOf(string, 'best') END.

Если вы не можете найти функцию, выполняющую вид indexOf, напишите еесамостоятельно используя CREATE FUNCTION функцию вашего менеджера баз данных.

1 голос
/ 02 июля 2011

Сторонним решением, которое вам нужно, является Sphinx (есть и другие). Подробнее о здесь:

http://www.ioncannon.net/programming/685/full-text-search-with-sphinx/

...