【问题标题】:SQL Full Text Index ContainsSQL全文索引包含
【发布时间】:2015-04-19 06:31:15
【问题描述】:

我是 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 手机,但忽略任何外围设备,例如外壳和屏幕保护膜,但我不知道如何做到这一点。

感谢任何建议。

谢谢

【问题讨论】:

  • 这是不可能的。您应该在表格中有类型列并对其进行过滤

标签: sql sql-server full-text-indexing containstable


【解决方案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;

【讨论】:

  • 谢谢,这是一个中肯的评论。有一个类别列可用于此目的,但首先数据来自外部来源,并不总是可靠的。其次,搜索词将来自用户输入,我不一定有幸传递一个类别。
  • 如果所有实际的 iPhone 产品的名称都具有相同的模式,那么使用 REGEXP 应该是可行的方法。 stackoverflow.com/questions/3452572/…
  • 您可以尝试的示例正则表达式:^Apple iPhone \d+( Plus)? - \d+ GB$
猜你喜欢
  • 2016-02-14
  • 2019-11-30
  • 1970-01-01
  • 2013-07-16
  • 2015-01-17
  • 1970-01-01
  • 2017-12-19
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多