Полнотекстовый индекс SQL содержит

Я новичок в SQL FTI и пытаюсь усовершенствовать поиск по таблице с миллионами различных продуктов.

Если я пропущу такой поиск:

select top 100 * from OMG_ProductFeeds.dbo.tbl_products
 where CONTAINS(ProductName,'"apple iphone 6"')

Я получаю эти результаты обратно:

Acm Rich Leather Soft Carry Case For Apple Iphone 6 Mobile Handpouch Holder Cover - Black
Apple iPhone 6 - 16 GB
Apple iPhone 6 Plus - 64 GB
Apple iPhone 6 - 64 GB
Apple iPhone 6 Plus - 16 GB
Chevron Set Of 3 Ultra Clear Screen Guard + 3 Matte Finish Screen Guard For Apple Iphone 6 - Combo Offer
Softy Back Cover Case For Apple Iphone 6 - Golden
Chevron Ultra Clear Hd Finish Screen Guard Protector For Apple Iphone 6 (pack Of 5)

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

Любые советы приветствуются.

Спасибо


person Giles Hunt    schedule 19.04.2015    source источник
comment
Это невозможно. У вас должен быть столбец типа в вашей таблице и фильтрация по нему.   -  person Giorgi Nakeuri    schedule 19.04.2015


Ответы (1)


Вы можете рассмотреть возможность изменения структуры вашей БД с помощью дополнительной таблицы - tbl_product_categories.

В tbl_products мы можем добавить столбец внешнего ключа для ссылки на соответствующую категорию из tbl_product_categories. Так что вы можете фильтровать только определенную категорию с определенным ключевым словом.

SELECT TOP 100 *
FROM OMG_PRODUCTFEEDS.DBO.TBL_PRODUCTS
WHERE CONTAINS(PRODUCTNAME,'"APPLE IPHONE 6"')
AND product_category_id = 1;
person Chris Lam    schedule 19.04.2015
comment
Спасибо, это справедливое замечание. Для этого можно использовать столбец категории, но, во-первых, данные формируются из внешнего источника и не всегда надежны. Во-вторых, поисковый запрос будет вводиться пользователем, и мне не обязательно будет роскошь передавать категорию. - person Giles Hunt; 19.04.2015
comment
Если все настоящие продукты iPhone имеют один и тот же шаблон в своих именах, использование REGEXP должно быть выходом. stackoverflow.com/questions/3452572/ - person Chris Lam; 19.04.2015
comment
Пример регулярного выражения, который вы можете попробовать: ^Apple iPhone \d+( Plus)? - \d+ GB$ - person Chris Lam; 19.04.2015