Программирование >>  Программирование баз данных 

1 ... 252 253 254 [ 255 ] 256 257 258 ... 346


А предостережение, о котором шла речь выше, состоит в том, что ключевое слово NOT не может использоваться отдельно; допустимым вариантом применения ключевого слова NOT в полнотекстовом поиске является лишь его упоминание вместе с AND.

Близость

Средства полнотекстового поиска СУБД SQL Server позволяют также проводить поиск с учетом критерия близости. Но в настояш;ее время список поддерживаемых ключевых слов, обозначающих такое понятие, как близость, сводится только к одному ключевому слову, NEAR. ЬСлючевое слово NEAR буквально означает близко и указывает, что искомые слова, заданные по обе стороны от оператора NEAR, должны находиться друг от друга не дальше определенного расстояния. Корпорация Microsoft не указывает, насколько близко должны находиться искомые слова, чтобы они рассматривались как соответствующие критерию NEAR, но практика показывает, что в большинстве ситуаций такие слова должны быть на расстоянии друг от друга, примерно равном восьми-десяти словам.

Формально можно считать, что оператором оценки близости является еще одно ключевое слово, но оно, скорее всего, представляет собой не слово, а символ. Речь идет о том, что при желании вместо ключевого слова NEAR можно использовать тильду (~). Во всем остальном какие-либо различия между этими двумя операторами отсутствуют. Сам автор возражает против применения такого знака операции, как тильда, с точки зрения обеспечения удобства чтения, поскольку далеко не все те, кто знакомится с кодом, могут понять, что означает символ ~, но большинство, по крайней мере, догадается о смысле слова NEAR.

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

В качестве примера рассмотрим, как осуществляется поиск слов welded и frame:

SELECT Rank, ProductModellD, CatalogDescription FROM Production.ProductModel p

JOIN CONTAINSTABLE(Production.ProductModel,*, welded near frame) ct ON p.ProductModellD = ct.[KEY]

В целях сокращения в запросе формируются данные только по первым двум столбцам, но заслуживает внимания то, что в двух возвращенных строках имеются разные оценки. Rank ProductModellD

14 19

2 25

(2 row(s) affected)

Изучение данных столбца CatalogDescription в полученных результатах (и в этом случае для сокращения не включено все содержимое столбца CatalogDescription) показывает, что в обеих строках присутствуют оба слова, но в строке с идентификатором ProductModellD, равным 19, они находятся немного ближе друг к другу, и этим объясняется более высокая оценка.



Но не следует также удивляться, столкнувшись с такими ситуациями, что строка, в которой крит£рии поиска показывают наличи£ меньшего расстояния между искомыми словами, получает более низкую оценку; следует помнить, что даже при использовании ключевого слова NEAR близость является лишь одним из нескольких критериев, применяемых в СУБД SQL Server для присваивания оценок строкам. В частности, полученные оценки зависят также от таких факторов, как процентная доля согласованных слов, различия в регистре букв, и от других критери£в.

Присваивание весовых коэффициентов

Безусловно, сами по себе оценки являются очень удобными, но иногда возникает необходимость указать, что одни искомые слова, входящие в состав критериев поиска, являются более важными, чем другие.

С учетом тех ситуаций, в которых необходимо присвоить более высокий приоритет одному или нескольким словам, предусмотрена возможность использовать при полнотекстовом поиске функцию 13АВ0ит()и ключевое слово WEIGHT. Синтаксис вызова функции IS ABOUT () с ключевым словом WEIGHT выглядит так:

ISABOUT(<weighted term> WEIGHT (<weight value>), <weighted term> WEIGHT (<weighted term>),-n)

Предположим, что заказчикам должна быть предоставлена возможность искать интересующие их велосипеды, а также указывать при этом предпочтительные модели велосипедов. По условиям рассматриваемого примера допустим, что заказчик больше всего интересуется горными велосипедами, но желает также узнать об имеющихся моделях туристических и дорожных велосипедов, в указанном порядке. Для получения отсортированного по порядку уменьшения величины оценки списка велосипедов можно выполнить следующий оператор:

SELECT Rank, ProductModellD, Name FROM Production.ProductModel pm

JOIN CONTAINSTABLE(Production.ProductModel, Name, 4SAB0UT (Road WEIGHT (.2), Touring WEIGHT (.4), Mountain WEIGHT (.8) ) ) ct

ON pm.ProductModellD = ct.[KEY] ORDER BY Rank DESC

Полученные результаты приведены ниже.

Rank Product ModelID Name

31 121 Fender Set - Mountain

31 5 HL Mountain Frame

31 46 HL Mountain Front Wheel

31 3 5 Touring-2 00 0

31 36 Touring-3000

31 12 0 Touring-Panniers

31 37 Womens Mountain Shorts

7 113 Road Bottle Cage

7 93 Road Tire Tube

7 25 Road-150

7 26 Road-250

78 HL Road Rear Wheel



7 76 HL Road Seat/Saddle 1

7 84 HL Road Seat/Saddle 2

7 90 HL Road Tire

(89 row(s) affected)

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

Определение флективных форм с помощью ключевого слова inflectional

Фактически возможность, рассматриваемая в этом разделе, не относится к предикату FREETEXT, поскольку этот предикат изначально рассчитан на обработку флективных форм. А ключевое слово INFLECTIONAL имеет немного другое назначение. По существу, это ключевое слово позволяет передать СУБД SQL Server сведения о том, что различные формы конкретного указанного слова имеют один и тот же общий смысл. Для этого применяется следующий синтаксис:

FORMSOF(INFLECTIONAL, <term>[, <term>[, -n]] )

С точки зрения средств полнотекстового поиска флективной формой слова является вариант основного слова, который имеет тот же общий смысл, например, слово swam - это просто форма глагола swim в прошедшем времени. А общий смысл двух этих слов является одинаковым.

Игнорируемые слова

Количество слов в разных национальных языках измеряется десятками и сотнями тысяч (причем следует помнить, что средства полнотекстового поиска поддерживают не только американский диалект английского языка). В большинстве языков имеются определенные слова, часто встречающиеся в предложениях, которые сами по себе почти не несут никакого смысла. Например, в английском языке таковыми считаются местоимения (you, she, he и т.д.), артикли (the, а, an) и союзы (and, but, or); это лишь немногие примеры слов, которые обнаруживаются в очень многих предложениях, но почти не вносят дополнительный смысл в эти предложения.

Если бы эти слова учитывались в средствах полнотекстового поиска SQL Server и поиск выполнялся на их основе, то результаты запросов, полученные из СУБД SQL Server, оказались бы практически неприменимыми, поскольку чаще всего происходил бы возврат каждой отдельной строки в таблице. Для выхода из этой ситуации применяется так называемый список игнорируемых слов. Он представляет собой список слов, игнорируемых СУБД SQL Server при поиске согласований.

По умолчанию список игнорируемых слов хранится в виде текстового файла в следующем каталоге:

Program Files\Microsoft SQL Server\MSSQL.l\MSSQL\FTData

Файл, применяемый для обработки текстов на американском диалекте английского языка, носит имя noiseENU.txt. В том же каталоге можно найти файлы со списками игнорируемых слов для нескольких других языков.



1 ... 252 253 254 [ 255 ] 256 257 258 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика