Как сортировать на основе поиска по ключевым словам? - PullRequest
0 голосов
/ 06 июля 2010

Мое заявление sql

SELECT *  
  FROM mytable 
 WHERE (CONTAINS(keyword,' "green" '))

Как мне перечислить наиболее подходящий результат, как этот

Green
Army Green
Hunter Green

вместо приведенных ниже

Army Green
Green
Hunter Green

Я знаю, что мы не можем использовать заказ по asc или desc с моим делом.

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

Кстати, мы все еще используем древний SQL Server 2000.

это ключевые слова, которые относятся к зеленому. Мне нравится получать самый лучший результат на основе ключевого слова ввода. Результат должен показать наиболее близкое совпадение с ключевым словом.

Данные в базе данных

Army Green
Blue-Green
Bright Green
British Racing Green
Camouflage Green
Dark Green
Dark Pastel Green
Electric Green
Fern Green
Forest Green
Green
Green-Yellow
Hunter Green
India Green
Islamic Green
Jungle Green
Kelly Green
Lawn Green
Lime Green
Moss Green
MSU Green
Office Green
Pastel Green
Persian Green
Pine Green
Sea Green
Shamrock Green
Spring Green
Tea Green
Yellow-Green

Ответы [ 5 ]

1 голос
/ 06 июля 2010

Возможно ...

SELECT *  
    FROM mytable 
    WHERE (CONTAINS(keyword,' "green" '))
    ORDER BY FIND_IN_SET('green', keyword);

Find_in_set MySQL хотя;у вас может не быть этого.Он просто возвращает позицию слова «зеленый» в столбце ключевых слов.

Похоже, что SQL Server имеет CHARINDEX('green', keyword), если это поможет.

0 голосов
/ 08 июля 2010

Я нашел решение, используя PATINDEX и функцию CASE для создания поддельного столбца и сортировки его из поддельного столбца, и он работает нормально.

Спасибо, ребята

0 голосов
/ 07 июля 2010

Похоже, вы пытаетесь найти частоту "зеленых" ключевых слов?

Предположим, что ваши таблицы выглядели так (Укажите полное и точное описание.):

CREATE TABLE mytable (item VARCHAR(40), keyword VARCHAR(100) )

INSERT INTO mytable (item, keyword)
SELECT      'room 01', 'Green'              UNION ALL
SELECT      'room 02', 'Green'              UNION ALL
SELECT      'room 03', 'Green'              UNION ALL
SELECT      'room 04', 'Army Green'         UNION ALL
SELECT      'room 05', 'Army Green'         UNION ALL
SELECT      'room 06', 'Hunter Green'       UNION ALL
SELECT      'room 07', 'Some Other Color'

.

Тогда желаемые результаты получаются путем:

SELECT      keyword, COUNT (item) AS cnt
FROM        mytable
WHERE       keyword LIKE '%green%'
GROUP BY    keyword 
ORDER BY    cnt DESC

/*
Yields:
    keyword         cnt
    ------------    ---
    Green           3
    Army Green      2
    Hunter Green    1
*/

.

Или, если используется полнотекстовое индексирование:

SELECT      keyword, COUNT (item) AS cnt
FROM        mytable
WHERE       (CONTAINS(keyword,' "green" '))
GROUP BY    keyword 
ORDER BY    cnt DESC

.
Если ключевое слово является столбцом text или ntext:

SELECT      CAST (keyword as VARCHAR(8000)), COUNT (item) AS cnt
FROM        mytable
WHERE       (CONTAINS(keyword,' "green" '))
GROUP BY    CAST (keyword as VARCHAR(8000))
ORDER BY    cnt DESC
0 голосов
/ 06 июля 2010

Я не совсем уверен, что вы ищете, и я не очень знаком с полнотекстовым поиском, но, возможно, вы могли бы просто заказать по len(keyword).

Это подойдет для вашего примера, тем не мение.Это не будет определять приоритет строк с более чем одним экземпляром «зеленого».

0 голосов
/ 06 июля 2010

Ну, вы можете в особом случае точно найти совпадения:

SELECT *  
  FROM mytable 
 WHERE keyword = 'green'
UNION ALL
SELECT *  
  FROM mytable 
 WHERE (CONTAINS(keyword,' "green" '))
   AND keyword <> 'green'
...