我正在使用 SQL Server 全文搜索可能包含 IP 地址的大型 varchar/varbinary 列中的文本。我知道地址中的点不在索引中,但我认为这样的短语搜索会起作用:
select * from myFTETable where contains(myFTEcolumn, "192 168 100 101")
它没有。我究竟做错了什么?有没有办法搜索 IP 地址,或者更一般地说,当原始数据中的短语包含标点符号时,有没有办法进行短语搜索?
谢谢。
我正在使用 SQL Server 全文搜索可能包含 IP 地址的大型 varchar/varbinary 列中的文本。我知道地址中的点不在索引中,但我认为这样的短语搜索会起作用:
select * from myFTETable where contains(myFTEcolumn, "192 168 100 101")
它没有。我究竟做错了什么?有没有办法搜索 IP 地址,或者更一般地说,当原始数据中的短语包含标点符号时,有没有办法进行短语搜索?
谢谢。
没错,LIKE 运算符没有利用全文索引,从而导致随着数据库的增长而导致查询运行时间较长。
您是否尝试过查询内部索引表以查看正在索引的数字?这可以通过运行来完成 -
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"') 会显示相关行。
需要注意的是,全文将删除一些较低的数字作为其停止列表机制的一部分。这可以通过在索引创建期间指定 STOPLIST OFF 或从内部停止列表中删除匹配的字符串来覆盖。