Как я присваиваю веса различным столбцам в полнотекстовом поиске?

Впервые мы вводим первый цикл r = 0 и для внутреннего цикла c=0. В этом случае условие внутреннего цикла не выполняется, поэтому первое состояние только из двух endl выполняется в начале и в конце внутреннего цикла. Для исправления необходимо поместить во второй цикл условие int c = 0; c <= r; c++. в этой ситуации вам нужно исправить условие первого цикла на int r=0; r<10; r++

вы можете увидеть это для диаграммы циклов: for_loop_diagram

исправленный код:

[110 ]

9
задан 3 revs, 2 users 97% 7 January 2015 в 15:36
поделиться

1 ответ

Лучшее решение состоит в том, чтобы использовать ContainsTable. Используйте объединение для создания запроса, который ищет все 3 столбца и добавляет, что целое число раньше указывало, какой столбец искался. Отсортируйте результаты по тому целому числу и затем оцените desc.

Разряд является внутренним к SQL-серверу и не чему-то, что можно скорректировать.

Вы могли также управлять возвращенным разрядом путем деления разряда на целое число (Имя будет разделено на 1, Ключевое слово и Местоположение 2 или выше). Это вызвало бы появление различных рейтингов.

Вот некоторый пример sql
: - Рекомендуют использовать, запускают отслеживание изменений и запускают фон updateindex (см. книги онлайн),

    SELECT 1 AS ColumnLocation, Key_Table.Rank, FT_Table.* FROM Restaurants AS FT_Table
 INNER JOIN ContainsTable(Restaurant, Name, 'chilly chicken') AS Key_Table ON 
FT_Table.RestaurantId = Key_Table.[Key]

UNION SELECT 2 AS ColumnLocation, Key_Table.Rank, FT_Table.* FROM Restaurants AS FT_Table
 INNER JOIN ContainsTable(Restaurant, Keywords, 'chilly chicken') AS Key_Table ON 
FT_Table.RestaurantId = Key_Table.[Key]

UNION SELECT 3 AS ColumnLocation, Key_Table.Rank, FT_Table.* FROM Restaurants AS FT_Table
 INNER JOIN ContainsTable(Restaurant, Location, 'chilly chicken') AS Key_Table ON 
FT_Table.RestaurantId = Key_Table.[Key]

ORDER BY ColumnLocation, Rank DESC

В продуктивной среде я вставил бы вывод запроса в табличную переменную для выполнения любого дополнительного управления прежде, чем возвратиться, результаты (может не быть необходимым в этом случае). Кроме того, избегайте использования *, просто перечислите столбцы, в которых Вы действительно нуждаетесь.

Править: Вы правы относительно использования ContainsTable, необходимо было бы изменить ключевые слова, чтобы быть '"холодны*" И "курица*"', я делаю это использование процесса, который маркирует входную фразу. Если Вы не захотите делать это, просто заменять каждый экземпляр ContainsTable выше с FreeTextTable, то запрос будет все еще работать то же.

7
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: