我使用SQL Server全文搜索可能包含IP地址的大型varchar / varbinary列中的文本。我知道地址中的点不在索引中,但我认为像这样的短语搜索会起作用:
从myFTETable中选择*包含(myFTEcolumn," 192 168 100 101")
它没有。我究竟做错了什么?有没有办法搜索IP地址,或者更常见的是,当原始数据中的短语包含标点时,是否有办法进行短语搜索?
感谢。
答案 0 :(得分:3)
你说得对,LIKE operator doesn't take advantage of the fulltext index导致数据库增长时查询运行时间过长。
您是否尝试过查询内部索引表以查看索引的数字是多少?这可以通过运行 -
来完成SELECT * FROM sys.dm_fts_index_keywords(db_id('{database}'), object_id('{table}'))
在全文索引表中插入192.168.100.101会在内部显示为8个不同的条目(4个数字,4个字符)并运行CONTAINS('“192 168 100 101”')会显示相关的行。< / p>
作为一个警告,全文将删除一些较低的数字作为其停止列表机制的一部分。这可以通过在创建索引期间指定STOPLIST OFF或从内部停止列表中删除匹配的字符串来覆盖。