模糊查询问题 大家帮帮忙:如何从SQL Server数据库里象google一样进行模糊查询?要效率高点的!还有是用Swing还是Jsp、Struts更便于发布? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sql语句里面加%作为通配符查询 除了sql里面的% 模糊查询外,还有什么方法? 关注一下 ADOQuery1->SQL->Add("select * from sales where title_id like '%"+x+"%'"); 我想是达不到的。据我所知,GOOGLE用的是一种非结构化的文件系统,这个与我们现有的关系数据库根本就是两回事,而且GOOGLE主要的强项在于海量的分布式运算以及完善的自学习功能。所以,在关系数据库下,达到GOOGLE的效率我觉得不太可能。 像GOOGLE 一样,GOOGLE它有专门的查找算法,如你输入 我爱吃香蕉 它也会找到 香蕉我爱吃 呵呵,这个算法好像是一个饿国人提出来的。用简单的SQL好像不行。http://www-900.ibm.com/developerWorks/cn/xml/x-tiplkws.shtml查找 XML 大纲 下载:http://jakarta.apache.org/lucene/参 考:http://www.linuxaid.com.cn/articles/9/4/947813985.shtml理论:索引数据源:record(field1,field2...) record(field1..) \ SQL: insert/ _____________ | DB Index | ------------- / SQL: select \结果输出:results(record(field1,field2..) record(field1...)) MSSQL里面的话,还是用通配符查询吧 Lucene全文索引引擎?或者怎么将数据库转换成满足Lucene的检索的要求? 中方承诺修复日本使馆 赔偿问题取得进展 http://www.phoenixtv.com/phoenixtv/72622743014604800/20050511/547996.shtml sql server有全文索引服务,建立索引后在标准sql中加检索语句就行了,具体语句格式想不起来了,可以查Sql server的帮助。 前两天偶尔查SQL server 帮助,全文检索语句是这么写的select * from abc where f1 contains 'efg',细节可以搜索contains关键字 错了,是 where contains(f1,'sasddfg')以下是微软的帮助文档内容:CONTAINS一个谓词,用于搜索包含基于字符的数据类型的列,该列与单个词和短语,以及与另一个词一定范围之内的近似词精确或模糊(不太精确的)匹配或者加权匹配。CONTAINS 可以搜索: 词或短语。词或短语的前缀。另一个词附近的词。由另一个词的词尾变化生成的词(例如,词 drive 是 drives、drove、driving 和 driven 词尾变化的词干)。比另一个词具有更高加权的词。 语法CONTAINS ( { column | * } , '< contains_search_condition >' ) < contains_search_condition > ::= { < simple_term > | < prefix_term > | < generation_term > | < proximity_term > | < weighted_term > } | { ( < contains_search_condition > ) { AND | AND NOT | OR } < contains_search_condition > [ ...n ] } < simple_term > ::= word | " phrase "< prefix term> ::= { "word * " | "phrase * " }< generation_term > ::= FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] ) < proximity_term > ::= { < simple_term > | < prefix_term > } { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]< weighted_term > ::= ISABOUT ( { { <simple_term> | < prefix_term > | < generation_term > | < proximity_term > } [ WEIGHT ( weight_value ) ] } [ ,...n ] ) 参数column已经注册全文检索的特定列的名称。字符串数据类型的列是有效的全文检索列。*指定应该使用表中所有已注册为全文检索的列,对给定的包含搜索条件进行搜索。如果 FROM 子句中有多个表,那么 * 必须由表名限定。 <contains_search_condition>指定要在 column 中搜索的文本。变量不能用作搜索条件。word没有空格或标点符号的字符串。phrase在每个词之间带有空格的一个或多个词。 说明 对于某些语言(例如亚洲的一些语言),短语可以由彼此之间没有空格的一个或多个词组成。<simple_term>指定对每个精确词(单字节语言中没有空格或标点符号的一个或多个字符)或短语(单字节语言中由空格和可选的标点符号分隔的一个或多个连续的词)的匹配。有效的简单术语示例为 "blue berry"、blueberry 和 "Microsoft SQL Server"。应该使用双引号 ("") 将短语括起来。短语中词出现的顺序(在 <contains_search_condition> 中指定)必须与它们出现在数据库列中的顺序相同。对词或短语中字符的搜索是区分大小写的。全文索引列中的干扰词(例如 a、and 或 the)不被存储在全文索引中。如果在单个词搜索中使用干扰词,那么 SQL Server 将返回一个错误信息指明查询中只有干扰词出现。SQL Server 在目录 \Mssql\Ftdata\Sqlserver\Config 下包括干扰词的标准列表。标点符号被忽略。因此,CONTAINS(testing, "computer failure") 将匹配具有 "Where is my computer?Failure to find it would be expensive." 值的行。<prefix_term>指定以指定文本开始的匹配词或短语。将前缀术语用双引号 ("") 引起来并在后一个引号前添加一个星号 (*),这样将匹配在星号前指定的所有以简单术语打头的文本。应这样指定该子句:CONTAINS (column, 'text*') 星号匹配零、一个或多个字符(属于词或短语中的词根或词)。 如果未用双引号分隔文本与星号,如 CONTAINS (column, 'text*') 中所示,那么全文检索将把星号作为字符处理并搜索 text* 的精确匹配项。当 <prefix_term> 是一个短语时,短语中包含的每个词都被认为是一个单独的前缀。因此,指定一个 "local wine *" 前缀术语的查询将匹配任何具有 "local winery"、"locally wined and dined" 等文本的行。< generation_term >当所包含的简单术语包括要搜索的原始词的不同变化时,指定匹配的词。 INFLECTIONAL 指定应匹配单数与复数以及名词、动词和形容词的性别与中性形式。也应匹配各种动词时态。 在 <generation_term> 中给定的 <simple_term> 将不与名词和动词匹配。 <proximity_term>指定匹配的词或短语,这些词或短语必须彼此接近。<proximity_term> 的运算与 AND 运算符相似:两者都要求在被搜索的列中有多个词或短语存在。如果 <proximity_term> 中的词彼此越接近,那么匹配就越好。 NEAR | ~ 指明 NEAR 或 ~ 运算符左边的词或短语应该与 NEAR 或 ~ 运算符右边的词或短语近似接近。可以链接多个近似术语,例如: a NEAR b NEAR c 这表示词或短语 a 应接近词或短语 b,而词或短语 b 应接近词或短语 c。 Microsoft® SQL Server™ 对左右两边的词或短语之间的距离分等级。低等级值(例如 0)指明两者之间距离较大。如果指定的词或短语之间相互分开,则认为满足了查询条件;但是,查询有一个很低的 (0) 等级值。然而,如果 <contains_search_condition> 仅由一个或多个 NEAR 近似术语组成,那么 SQL Server 不返回等级值为 0 的行。有关分等级的更多信息,请参见 CONTAINSTABLE。 <weighted_term>指定匹配词和短语列表的匹配行(由查询返回),可以对每行随意给定一个加权值。 ISABOUT 指定 <weighted_term> 关键字。WEIGHT (weight_value) 指定数值介于 0.0 和 1.0 之间的加权值。<weighted_term> 中的每个组件可能包含一个 weight_value。通过 weight_value,可以改变查询的各个部分怎样来影响指派给与查询匹配的每行的等级值。加权对值的等级进行不同的度量强制,因为使用了 <weighted_term> 的所有组件来共同确定匹配。如果存在与任意一个 ISABOUT 参数的匹配,则返回一行,而不论是否指派了加权值。若要确定每个返回行的等级值(该值指明返回行之间的匹配程度),请参见 CONTAINSTABLE。 AND | AND NOT | OR指定两个包含搜索条件之间的逻辑运算。当 <contains_search_condition> 包含有括号中的组时,首先计算这些组。在计算括号中的组之后,当与包含搜索条件一起使用这些逻辑运算符时,应用下面的规则: NOT 在 AND 之前应用。NOT 只能出现在 AND 之后,例如 AND NOT。不允许使用 OR NOT 运算符。不能将 NOT 运算符指定在第一术语之前(例如,CONTAINS (mycolumn, 'NOT "phrase_to_search_for" '))。AND 在 OR 之前应用。相同类型的布尔运算符 (AND、OR) 可以结合使用,并因此可以按任何顺序进行应用。 n一个占位符,指明可在其中指定多个包含搜索条件和术语。注释如果兼容级别小于 70,则 CONTAINS 不被看作是关键字。有关更多信息,请参见 sp_dbcmptlevel。 示例A. 使用带有 <simple_term> 的 CONTAINS下面的示例查找包含词"bottles"且价格为 $15.00 的所有产品。USE NorthwindGOSELECT ProductNameFROM ProductsWHERE UnitPrice = 15.00 AND CONTAINS(QuantityPerUnit, 'bottles')GOB. 在 <simple_term> 中使用 CONTAINS 和短语下面的示例返回包含短语 "sasquatch ale" 或 "steeleye stout" 的所有产品。USE NorthwindGOSELECT ProductNameFROM ProductsWHERE CONTAINS(ProductName, ' "sasquatch ale" OR "steeleye stout" ')GOC. 使用带有 <prefix_term> 的 CONTAINS下面的示例返回所有满足该条件的产品名称:这些产品名称至少含有一个以 ProductName 列中前辍 Choc 起始的词。USE NorthwindGOSELECT ProductNameFROM ProductsWHERE CONTAINS(ProductName, ' "choc*" ')GOD. 使用带有 <prefix_term> 的 CONTAINS 和 OR下面的示例返回包含字符串 "sea" 或 "bread" 的所有分类描述。USE NorthwindSELECT CategoryNameFROM CategoriesWHERE CONTAINS(Description, '"sea*" OR "bread*"')GOE. 使用带有 <proximity_term> 的 CONTAINS下面的示例返回在词 "spread" 附近有词 "Boysenberry" 的所有产品名称。USE NorthwindGOSELECT ProductNameFROM ProductsWHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')GOF. 使用带有 <generation_term> 的 CONTAINS下面的示例搜索具有 dry 形式的词的所有产品:dried 和 drying 等等。USE NorthwindGOSELECT ProductNameFROM ProductsWHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')GOG. 使用带有 <weighted_term> 的 CONTAINS下面的示例搜索包含词 spread、sauces 或 relishes 以及给予每个词不同加权的所有产品名称。USE NorthwindGOSELECT CategoryName, DescriptionFROM CategoriesWHERE CONTAINS(Description, 'ISABOUT (spread weight (.8), sauces weight (.4), relishes weight (.2) )' )GOH. 使用带变量的 CONTAINS下例使用变量而非特定的搜索术语。USE pubsGODECLARE @SearchWord varchar(30)SET @SearchWord ='Moon'SELECT pr_info FROM pub_info WHERE CONTAINS(pr_info, @SearchWord)请参见FREETEXTFREETEXTTABLE使用 CONTAINS 谓词WHERE©1988-2000 Microsoft Corporation。保留所有权利。 楼上说的where contains(f1,'sasddfg')只能解决英文的全文检索,不能解决中文的全文检索. 如果要进行中文的全文检索1. Language for WordBreaker设成“中文(中国)”:右击你的table.Full-text Indexing Wizard->Edit Full-Text Indexing下一步,在Select Table Columns 頁中,把Language for WordBreaker 設成"中文(中國)",下一步,完成。然後右击你的table,Start Full Population.2.启动microsoft Seacher服务3.where contains(yourfield,'"*你要查的词*"')双引号与*号一定要有,否则就会出现错误注意:被sqlserver认为是通用的词,在进行全文索引整理的时候,这种词是不做索引的。英文里一般有“this”,“is”等等,中文有“的”,“有”等等. jquery-1.6.4.min.js报错,系统调用Jquery也报错了一大堆 下载那个版本的Eclipse? 如何模拟ActionForm 请教大家一个问题? 如何查看变量的类型,谢谢大家了。 图形界面显示有问题,新手求助 从二进制文件中读取一个Int变量应怎样? 一个很菜的线程问题 日期问题,会者不难 关于类加载机制中解析和分派的一点问题 请问谁有java写的导出oracle数据库的表结构的程序? 在sybase中如下语句select * into tableA from tableB能够生成tableA表,其结构如同tableB,在oracle中能否实现类似功能,先谢了
如你输入
我爱吃香蕉 它也会找到 香蕉我爱吃 呵呵,这个算法好像是一个饿国人提出来的。用简单的SQL好像不行。
http://www-900.ibm.com/developerWorks/cn/xml/x-tiplkws.shtml
查找 XML 大纲
http://jakarta.apache.org/lucene/参 考:
http://www.linuxaid.com.cn/articles/9/4/947813985.shtml理论:索引数据源:record(field1,field2...) record(field1..) \ SQL: insert/ _____________ | DB Index | ------------- / SQL: select \结果输出:results(record(field1,field2..) record(field1...))
或者怎么将数据库转换成满足Lucene的检索的要求?
http://www.phoenixtv.com/phoenixtv/72622743014604800/20050511/547996.shtml
select * from abc where f1 contains 'efg',细节可以搜索contains关键字
以下是微软的帮助文档内容:CONTAINS
一个谓词,用于搜索包含基于字符的数据类型的列,该列与单个词和短语,以及与另一个词一定范围之内的近似词精确或模糊(不太精确的)匹配或者加权匹配。CONTAINS 可以搜索: 词或短语。
词或短语的前缀。
另一个词附近的词。
由另一个词的词尾变化生成的词(例如,词 drive 是 drives、drove、driving 和 driven 词尾变化的词干)。
比另一个词具有更高加权的词。
语法
CONTAINS
( { column | * } , '< contains_search_condition >'
) < contains_search_condition > ::=
{ < simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
| < weighted_term >
}
| { ( < contains_search_condition > )
{ AND | AND NOT | OR } < contains_search_condition > [ ...n ]
} < simple_term > ::=
word | " phrase "< prefix term> ::=
{ "word * " | "phrase * " }< generation_term > ::=
FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] ) < proximity_term > ::=
{ < simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]< weighted_term > ::=
ISABOUT
( { {
<simple_term>
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
) 参数
column已经注册全文检索的特定列的名称。字符串数据类型的列是有效的全文检索列。*指定应该使用表中所有已注册为全文检索的列,对给定的包含搜索条件进行搜索。如果 FROM 子句中有多个表,那么 * 必须由表名限定。 <contains_search_condition>指定要在 column 中搜索的文本。变量不能用作搜索条件。word没有空格或标点符号的字符串。phrase在每个词之间带有空格的一个或多个词。 说明 对于某些语言(例如亚洲的一些语言),短语可以由彼此之间没有空格的一个或多个词组成。
<simple_term>指定对每个精确词(单字节语言中没有空格或标点符号的一个或多个字符)或短语(单字节语言中由空格和可选的标点符号分隔的一个或多个连续的词)的匹配。有效的简单术语示例为 "blue berry"、blueberry 和 "Microsoft SQL Server"。应该使用双引号 ("") 将短语括起来。短语中词出现的顺序(在 <contains_search_condition> 中指定)必须与它们出现在数据库列中的顺序相同。对词或短语中字符的搜索是区分大小写的。全文索引列中的干扰词(例如 a、and 或 the)不被存储在全文索引中。如果在单个词搜索中使用干扰词,那么 SQL Server 将返回一个错误信息指明查询中只有干扰词出现。SQL Server 在目录 \Mssql\Ftdata\Sqlserver\Config 下包括干扰词的标准列表。标点符号被忽略。因此,CONTAINS(testing, "computer failure") 将匹配具有 "Where is my computer?Failure to find it would be expensive." 值的行。<prefix_term>指定以指定文本开始的匹配词或短语。将前缀术语用双引号 ("") 引起来并在后一个引号前添加一个星号 (*),这样将匹配在星号前指定的所有以简单术语打头的文本。应这样指定该子句:CONTAINS (column, 'text*') 星号匹配零、一个或多个字符(属于词或短语中的词根或词)。 如果未用双引号分隔文本与星号,如 CONTAINS (column, 'text*') 中所示,那么全文检索将把星号作为字符处理并搜索 text* 的精确匹配项。当 <prefix_term> 是一个短语时,短语中包含的每个词都被认为是一个单独的前缀。因此,指定一个 "local wine *" 前缀术语的查询将匹配任何具有 "local winery"、"locally wined and dined" 等文本的行。< generation_term >当所包含的简单术语包括要搜索的原始词的不同变化时,指定匹配的词。 INFLECTIONAL
指定应匹配单数与复数以及名词、动词和形容词的性别与中性形式。也应匹配各种动词时态。
在 <generation_term> 中给定的 <simple_term> 将不与名词和动词匹配。 <proximity_term>指定匹配的词或短语,这些词或短语必须彼此接近。<proximity_term> 的运算与 AND 运算符相似:两者都要求在被搜索的列中有多个词或短语存在。如果 <proximity_term> 中的词彼此越接近,那么匹配就越好。 NEAR | ~
指明 NEAR 或 ~ 运算符左边的词或短语应该与 NEAR 或 ~ 运算符右边的词或短语近似接近。可以链接多个近似术语,例如:
a NEAR b NEAR c 这表示词或短语 a 应接近词或短语 b,而词或短语 b 应接近词或短语 c。 Microsoft® SQL Server™ 对左右两边的词或短语之间的距离分等级。低等级值(例如 0)指明两者之间距离较大。如果指定的词或短语之间相互分开,则认为满足了查询条件;但是,查询有一个很低的 (0) 等级值。然而,如果 <contains_search_condition> 仅由一个或多个 NEAR 近似术语组成,那么 SQL Server 不返回等级值为 0 的行。有关分等级的更多信息,请参见 CONTAINSTABLE。 <weighted_term>指定匹配词和短语列表的匹配行(由查询返回),可以对每行随意给定一个加权值。 ISABOUT
指定 <weighted_term> 关键字。WEIGHT (weight_value)
指定数值介于 0.0 和 1.0 之间的加权值。<weighted_term> 中的每个组件可能包含一个 weight_value。通过 weight_value,可以改变查询的各个部分怎样来影响指派给与查询匹配的每行的等级值。加权对值的等级进行不同的度量强制,因为使用了 <weighted_term> 的所有组件来共同确定匹配。如果存在与任意一个 ISABOUT 参数的匹配,则返回一行,而不论是否指派了加权值。若要确定每个返回行的等级值(该值指明返回行之间的匹配程度),请参见 CONTAINSTABLE。
AND | AND NOT | OR指定两个包含搜索条件之间的逻辑运算。当 <contains_search_condition> 包含有括号中的组时,首先计算这些组。在计算括号中的组之后,当与包含搜索条件一起使用这些逻辑运算符时,应用下面的规则: NOT 在 AND 之前应用。
NOT 只能出现在 AND 之后,例如 AND NOT。不允许使用 OR NOT 运算符。不能将 NOT 运算符指定在第一术语之前(例如,CONTAINS (mycolumn, 'NOT "phrase_to_search_for" '))。
AND 在 OR 之前应用。
相同类型的布尔运算符 (AND、OR) 可以结合使用,并因此可以按任何顺序进行应用。
n一个占位符,指明可在其中指定多个包含搜索条件和术语。注释
如果兼容级别小于 70,则 CONTAINS 不被看作是关键字。有关更多信息,请参见 sp_dbcmptlevel。 示例
A. 使用带有 <simple_term> 的 CONTAINS
下面的示例查找包含词"bottles"且价格为 $15.00 的所有产品。USE Northwind
GO
SELECT ProductName
FROM Products
WHERE UnitPrice = 15.00
AND CONTAINS(QuantityPerUnit, 'bottles')
GOB. 在 <simple_term> 中使用 CONTAINS 和短语
下面的示例返回包含短语 "sasquatch ale" 或 "steeleye stout" 的所有产品。USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "sasquatch ale" OR "steeleye stout" ')
GOC. 使用带有 <prefix_term> 的 CONTAINS
下面的示例返回所有满足该条件的产品名称:这些产品名称至少含有一个以 ProductName 列中前辍 Choc 起始的词。USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' "choc*" ')
GOD. 使用带有 <prefix_term> 的 CONTAINS 和 OR
下面的示例返回包含字符串 "sea" 或 "bread" 的所有分类描述。USE Northwind
SELECT CategoryName
FROM Categories
WHERE CONTAINS(Description, '"sea*" OR "bread*"')
GOE. 使用带有 <proximity_term> 的 CONTAINS
下面的示例返回在词 "spread" 附近有词 "Boysenberry" 的所有产品名称。USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, 'spread NEAR Boysenberry')
GOF. 使用带有 <generation_term> 的 CONTAINS
下面的示例搜索具有 dry 形式的词的所有产品:dried 和 drying 等等。USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')
GOG. 使用带有 <weighted_term> 的 CONTAINS
下面的示例搜索包含词 spread、sauces 或 relishes 以及给予每个词不同加权的所有产品名称。USE Northwind
GO
SELECT CategoryName, Description
FROM Categories
WHERE CONTAINS(Description, 'ISABOUT (spread weight (.8),
sauces weight (.4), relishes weight (.2) )' )
GOH. 使用带变量的 CONTAINS
下例使用变量而非特定的搜索术语。USE pubs
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='Moon'
SELECT pr_info FROM pub_info WHERE CONTAINS(pr_info, @SearchWord)
请参见FREETEXTFREETEXTTABLE使用 CONTAINS 谓词WHERE©1988-2000 Microsoft Corporation。保留所有权利。
1. Language for WordBreaker设成“中文(中国)”:
右击你的table.Full-text Indexing Wizard->Edit Full-Text Indexing
下一步,在Select Table Columns 頁中,把Language for WordBreaker 設成"中文(中國)",下一步,完成。
然後右击你的table,Start Full Population.
2.启动microsoft Seacher服务
3.where contains(yourfield,'"*你要查的词*"')
双引号与*号一定要有,否则就会出现错误注意:
被sqlserver认为是通用的词,在进行全文索引整理的时候,这种词是不做索引的。英文里一般有“this”,“is”等等,中文有“的”,“有”等等.