全文目录/索引搜索%book%

11 浏览
0 Comments

全文目录/索引搜索%book%

我正在努力理解如何在SQL Server (2005)全文目录中搜索出现在单词/表达式中间的内容,就像搜索"LIKE %book%"一样。我该如何做到这一点?似乎CONTAINSFREETEXT都不支持在搜索表达式的开头使用通配符 - 这真的可能吗?我本以为FREETEXT(*,"book")会找到任何包含"book"的内容,包括"rebooked"之类的。

0
0 Comments

如果您想进行一些严肃的全文搜索,我会建议使用Lucene.Net。MS SQL全文搜索似乎只能对基本内容起作用,对于其他内容并不起作用。

One possible reason for the limitation of MS SQL Full Text search is that it may not have a comprehensive full text catalog or index for the specific search term "%book%". A full text catalog or index is essential for efficient searching of large amounts of text data.

要解决这个问题,可以尝试以下方法:

1. 确保已经创建了适当的全文目录或索引。可以通过以下代码来创建全文目录:

CREATE FULLTEXT CATALOG [catalog_name] AS DEFAULT;

2. 确保已经为表中的文本列创建了全文索引。可以通过以下代码来创建全文索引:

CREATE FULLTEXT INDEX ON [table_name] ([column_name]) KEY INDEX [index_name] ON [catalog_name];

3. 确保已经启用了全文搜索功能。可以通过以下代码来启用全文搜索:

ALTER FULLTEXT INDEX ON [table_name] ENABLE;

4. 确保已经对文本列进行了适当的分词和词干化处理。可以通过以下代码来配置分词和词干化处理:

ALTER FULLTEXT INDEX ON [table_name] SET STOPLIST = OFF;
ALTER FULLTEXT INDEX ON [table_name] SET LANGUAGE 1033; 

通过执行以上步骤,可以确保MS SQL Full Text search对"%book%"这个搜索项有更好的结果。同时,使用Lucene.Net作为替代方案也可以获得更好的全文搜索体验。

0
0 Comments

全文目录/索引搜索对于%book%的问题出现的原因是SQL Server全文搜索是基于将文本分词为单词。没有更小的单位作为单词,所以你可以查找的最小东西就是单词。

您可以使用前缀搜索来查找以某些字符开头的匹配项,这是可能的,因为单词列表按字母顺序排列,并且服务器只需扫描列表即可找到匹配项。

要做到这一点,使用一个带有LIKE '%book%'子句的查询可能会同样快(或慢)。

0
0 Comments

由于CONTAINS仅支持前缀通配符,因此无法通过CONTAINS实现全文目录或索引搜索"book"的功能。然而,可以通过使用前缀通配符来模拟"like"搜索,如下所示:CONTAINS(*, '"book*"')。这种方法在iFTS中非常有效。

然而,这种方法只能实现以"book"开头的搜索,无法实现包含"book"的任意位置的搜索。因此,如果需要实现全文目录或索引搜索"book"的功能,需要采取其他解决方法。

一种解决方法是使用其他支持全文索引搜索的工具或技术,例如Elasticsearch或Solr。这些工具提供更强大和灵活的全文搜索功能,可以满足更复杂的搜索需求。

另一种解决方法是通过使用LIKE运算符结合通配符来实现全文搜索。像这样:SELECT * FROM table WHERE column LIKE '%book%'。这将匹配包含"book"的任何位置的字符串。

总结起来,要实现全文目录或索引搜索"book"的功能,可以考虑使用其他支持全文搜索的工具或技术,或者使用LIKE运算符结合通配符来实现搜索。这样可以更灵活地满足搜索需求。

0