问题标签 [freetext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1795 浏览

sql-server - 对多个表的 FreeText COUNT 查询超级慢

我有两张桌子:

产品表有大约 120K 条记录 Brand 表有 30K 条记录

我需要查找名称和品牌与特定关键字匹配的所有产品的数量。

我像这样使用自由文本“包含”:

此查询大约需要17 秒。 在运行此查询之前,我重建了 FreeText 索引。

如果我只检查 Product.Name。他们的查询时间少于 1 秒。同样,如果我只检查 Brand.Name。如果我使用 OR 条件,就会出现问题。

如果我切换查询以使用 LIKE:

需要1 秒。

我在 MSDN 上读到:http: //msdn.microsoft.com/en-us/library/ms187787.aspx

要搜索多个表,请在 FROM 子句中使用连接表来搜索由两个或多个表组成的结果集。

所以我在 FROM 中添加了一个 INNER JOINED 表:

这会导致错误:不能在列“ProductName”上使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引。

所以问题是 - 为什么 OR 条件会导致查询缓慢?

0 投票
1 回答
1973 浏览

sql - Sql Server 2005全文区分大小写问题

我似乎在 Microsoft SQL Server 2005 中有一个奇怪的错误,FREETEXT()尽管排序规则不区分大小写 ( Latin1_General_CI_AS),但搜索有点区分大小写。

首先,LIKE查询完全不区分大小写,所以

返回相同的结果。

此外,FREETEXT实际上在某种程度上不区分大小写,例如

将返回不同情况的结果。

虽然仍然返回不区分大小写的匹配word,但会给出不同的结果集。或者,正如我在一些调查后发现的那样,搜索word给出了不同情况的所有匹配项,word但搜索Word给出了相同的 PLUS 屈折结果。

或者使用我发现的实际案例之一,搜索marketingleader返回包含该单词的所有结果,与大小写无关,而搜索Marketingleader将返回那些,但也包含仅包含leader在搜索小写时不显示的结果.

有没有人知道是什么原因造成的,以及如何打开屈折/模糊搜索小写单词?

任何帮助,将不胜感激。

0 投票
3 回答
1625 浏览

sql-server - 如何处理 MS-SQL FreeText 搜索中的单字符搜索词?

我在使用当前在 SQL 2000 服务器上运行的 FreeText 搜索时遇到问题。

在包含公司名称的大约 130 万行的表中,我尝试使用 FreeText 查询。但是,由于 SQL Server 在构建其索引时会去除特殊字符和单个字符,因此我们的代码在提交查询时也会这样做。

例如,像“Texas A & M”这样的搜索最终只查询“Texas”,它会返回大量不相关的记录。

处理这类搜索查询的最佳做法是什么?升级到较新版本的 SQL Server 是否可以解决此问题?

在这一点上,像 Lucene 这样的第三方索引引擎不是一个选择,即使它可以解决问题,我不确定。

0 投票
6 回答
2870 浏览

sql - 自由文本查询很慢 - 包括 TOP 和 Order By

Product 表中有 700K 记录。查询:

SELECT TOP 1 ID, Name FROM Product WHERE contains(Name, '"White Dress"') ORDER BY DateMadeNew desc

运行大约需要 1 分钟。DateMadeNew 上有一个非聚集索引,Name 上有 FreeText 索引。

如果我删除 TOP 1 或 Order By - 运行时间不到 1 秒。

这是执行计划的链接。 http://screencast.com/t/ZDczMzg5N

看起来 FullTextMatch 执行次数超过 400K。为什么会这样?怎样才能做得更快?

2010 年 5 月 3 日更新

看起来基数在多词 FreeText 搜索中不正常:

优化器估计有 28K 记录匹配“White Dress”,而实际上只有 1 个。 http://screencast.com/t/NjM3ZjE4NjAt

如果我将“White Dress”替换为“White”,估计数字为“27,951”,而实际数字为“28,487”,这要好得多。

似乎优化器只使用短语中的第一个单词来搜索基数。

0 投票
2 回答
855 浏览

sql-server - SQL Server 2005 FREETEXT() 性能问题

我有一个查询,其中包含大约 6-7 个连接表和一个 FREETEXT() 谓词,位于 where 的基表的 6 列上。

现在,这个查询在去年运行良好(不到 2 秒)并且实际上保持不变(我尝试了旧版本,问题仍然存在)

所以今天,突然之间,相同的查询大约需要 1-1.5 分钟。

检查SQL Server 2005中的执行计划后,重建那个表的FULLTEXT索引,重新组织FULLTEXT索引,从头开始创建索引,重启SQL Server服务,重启整个服务器不知道还有什么办法。

我暂时将查询改为使用LIKE,直到我弄清楚(现在大约需要 6 秒)。

当我在查询性能分析器中查看查询时,当我将“FREETEXT”查询与“LIKE”查询进行比较时,前者的读取次数是 350 倍(4921261 对 13943)和 20 倍(38937 对 1938)后者的 CPU 使用率。

所以真的是“FREETEXT”谓词导致它如此缓慢。

有没有人对可能的原因有任何想法?或者我可以做进一步的测试?

[编辑]

好吧,我只是再次运行查询以获取执行计划,现在又需要 2-5 秒,没有对其进行任何更改,尽管问题昨天仍然存在。这不是由于任何外部因素,因为我在上周四第一次测试该问题时停止了所有访问数据库的应用程序,所以这不是由于任何其他负载。

好吧,我仍然会包含执行计划,尽管现在一切都恢复正常了,这可能没有多大帮助......并且要注意,这是对我无法更改的遗留数据库的巨大查询(即规范化数据或获取去掉一些不必要的中间表)

查询计划

好的,这是完整的查询

我可能不得不解释它到底做了什么。基本上它会获取招聘广告的搜索结果,其中有两种类型的广告,高级广告和普通广告。结果被分页为每页 25 个结果,如果有足够的话,顶部有 10 个高级结果,之后是 15 个正常结果。

所以有两个内部查询可以根据需要选择尽可能多的高级/普通查询(例如,在第 10 页上,它获取前 100 个高级查询和前 150 个普通查询),然后这两个查询与 row_number() 命令和一些数学运算交错. 然后组合按行号排序并返回查询。好吧,它在另一个地方被用来获取当前页面所需的 25 个广告。

哦,整个查询是在一个巨大的遗留 Coldfusion 文件中构建的,并且由于它运行良好,到目前为止我还不敢修改/更改大部分内容......永远不要触摸正在运行的系统等等;)只是像改变这样的小东西中央 where 子句的位。

该文件还生成其他基本相同的查询,但没有高级/非高级区分以及此查询的许多其他变体,所以我不太确定对其中一个的更改可能会如何改变其他查询。 .

好的,由于问题没有再次出现,我给了 Martin 赏金,因为他是迄今为止最有帮助的人,我不希望赏金不必要地过期。感谢其他所有人的努力,如果再次发生,我会尝试您的建议:)

0 投票
3 回答
10280 浏览

sql-server - 谷歌喜欢在 SQL Server 中使用全文搜索的搜索查询

我正在运行一个小型网站,我想在其中创建相关链接部分之类的功能。

为此,我创建了全文目录和索引。

到目前为止,我尝试了很多方法来创建类似于 google 的搜索查询,但我想说我什至没有 10% 接近 google 正在做的事情。在我的研究中,我发现只有在查询之后才能获得良好的记录。

有没有人有创建全文搜索查询的好方法,可以帮助获得给定文本的更好的相关记录?

谢谢

0 投票
1 回答
438 浏览

.net - 可扩展的自由文本和参数搜索 (C#)

目前,我们有一个应用程序需要对大约 2 个工厂记录执行非常快速的搜索。

搜索需要搜索一个大的自由文本字段,以及不同范围之间的许多整数/小数字段,以及各种函数/计算和排序。

目前,我们正在使用一个大型 MSSQL 数据库来处理这个问题,使用内置的自由文本引擎和一些复制来将负载从事务表中移开。

但是 - 正如您可能已经猜到的那样,这个解决方案并不是最具可扩展性的。

我已经编写了一个基于 Lucene 的小型文档存储,并且通常对结果印象深刻,文本搜索所用的时间不会超过每秒 1/2 秒(在 10 万条记录上)。

困难的部分是参数搜索——我知道 Lucene 可以进行基本的范围匹配——但是我觉得我们需要更强大的东西。

我使用 db4o 制作了一个小测试数据库——它具有强大的查询功能,但是这些查询非常慢——仅在 100k 条记录上占用超过 15 秒——其中 SQL 大约需要 1.5 秒用于自由文本和参数搜索。

此外,我们的数据库需要有小于 10 分钟的更新分辨率,每天大约有 15% 的记录发生变化。我们的 SQL 服务器目前正在处理这个问题,但开始吱吱作响。

任何有关合适技术和方法的指导将不胜感激。

干杯,戴夫

0 投票
2 回答
356 浏览

sql-server - Full-text Search on documents and related data mssql

Currently in the middle of building a knowledge base app and am a bit unsure on the best way to store and index the document information.

The user uploads the document and when doing so selects a number of options from dropdown lists (such as category,topic,area..., note these are not all mandatory) they also enter some keywords and a description of the document. At the moment the category (and others) selected is stored as foreign key in the documents table using the id from the categories table. What we want to be able to do is do a FREETEXTTABLE or CONTAINSTABLE on not only the information within the varchar(max) column where the document is located but also on the category name, topic name and area name etc.

I looked at the option of creating an indexed view but this wasn't possible due to the LEFT JOIN against the category column. So I'm not sure how to go about being able to do this any ideas would be most appreciated.

0 投票
3 回答
268 浏览

asp.net - 用于在 ASP.NET 中搜索的拼写检查器

我正在构建一个搜索,我需要在其中实现几个功能。

1- 它应该带来所有同义词,比如如果有人搜索沙发,它应该带来该沙发的匹配结果以及语言匹配,如(沙发、靠垫等)。为此,我正在使用全文搜索。

在我的查询中,我使用 FreeText,但它没有产生所需的结果。我就是做这个的,

它应该将包含 Cushions、Sofa 和 Couch 的 Names 带走,但它只带 Names with Couch,我也可以通过简单的 Like 查询来做到这一点。有什么解决办法吗?

2- 我需要检查拼写错误,比如如果有人打字,soofa它应该会带来沙发、沙发等的结果。

关于如何实现这一目标的任何提示和想法?提前致谢。

0 投票
1 回答
10589 浏览

sql - SQL Server 2008 中的 FREETEXT 查询不是短语匹配

我在 SQL Server 2008 中有一个全文索引表,我正在尝试使用 FULLTEXT 查询精确的短语匹配。我不相信使用 CONTAINS 或 LIKE 适合于此,因为在其他情况下查询可能不准确(用户不会用双引号括起短语),而且通常我想要 FREETEXT 的灵活性。

根据FREETEXT的文档[MSDN]:

如果 freetext_string 用双引号括起来,则改为执行短语匹配;不执行词干提取和词库。

这会让我相信这样的查询:

只会返回“市政厅”一词出现在“说明”字段中的结果,但我得到的结果如下:

1 曼宁大厅的障碍坡道设计。
2 天线调查。客户:克兰斯顿市工程部
3 对国际网球名人堂火灾损坏的结构调查。
4 调查 先驱大厅拟议卫星设计的屋顶调查。
... ETC

显然,这些结果至少包括我的短语中的一个单词,但不包括短语本身。更糟糕的是,我原以为结果会被排名,但我真正想要的两个结果(因为它们包括实际的短语)被埋没了。

1 昆西马萨诸塞州现有市政厅的主要外部和内部改造
2 对受泄漏困扰的 Pawtucket 市政厅塔楼进行粗略的结构调查。

我确定这是我不理解文档的情况,但是有没有办法实现我正在寻找的东西?即,能够在不带引号的情况下传递搜索字符串并获得我现在得到的确切内容,或者使用引号并只获得那个确切的短语?