2015-04-19 10 views
0

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

Если я прохожу поиска, такие как это:

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 телефонов, но игнорировать любые периферийные устройства таких как случаи и защитники экрана, но я не уверен, как это сделать.

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

Благодаря

+1

Это невозможно. У вас должен быть столбец типа в вашей таблице и фильтр на нем –

ответ

2

Вы можете рассмотреть вопрос о повторном проектировании структуры БД с дополнительным столом - 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; 
+0

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

+0

Если все фактические продукты iPhone получили одинаковые шаблоны в своих именах, использование REGEXP должно быть способом. http://stackoverflow.com/questions/3452572/mysql-regex-in-the-where-clause –

+0

Образец регулярного выражения вы можете попробовать: '^ Apple iPhone \ d + (Plus)? - \ d + GB $ ' –