问题标签 [full-text-search]

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 投票
5 回答
5997 浏览

c# - 构建搜索功能的最佳方式

我有一个拥有超过 400,000 个项目的网站。有些相似,有些截然不同。我们希望提供一种以最佳方式搜索这些项目的方法。在交付网站后,它使用的是全文索引。解决方案充其量是基本的,最坏的情况是严重不足。

那么搜索这些项目的最佳方法是什么?它们存储在 SQL Server 数据库 (2005) 中。我们的网站是用 C# 2.0 设计的。

目前这里是这个过程:

  1. 用户在文本框中输入值。
  2. 我们“清理”这个条目。删除可能是黑客攻击的“可怕”字符。删除关键词(and, or, etc..)
  3. 将值传递给存储过程以返回结果。
  4. 返回结果。
0 投票
1 回答
1751 浏览

sql-server - 计算列的全文搜索

我需要允许对连接在一起的两个字段进行全文搜索。在这种情况下,FullName = FirstName + ' ' + LastName。简单的方法似乎是创建一个 FullName 计算列,然后将其作为一列包含在全文索引中。这是一种可接受的方法吗?你会怎么做?

UPDATE 和 INSERT 很少发生,相比之下,使用 CONTAINS 的 SELECT 很常见。我正在使用 SQL 2008。

示例表定义,其中 FirstName、LastName、NickName 和 FullName 是全文搜索中使用的列:

0 投票
1 回答
186 浏览

ruby-on-rails - Acts_as_ferret 使用单一索引

我已经开始使用acts_as_ferret 将文本搜索添加到应用程序。在我的示例应用程序(另一个博客!)中,我在文章中定义和索引如下:

我想要一个在单个字段上搜索的选项,例如让我获取标题包含“rails”的所有文章,而不是标题或正文包含“rails”的所有文章。

如何将搜索限制在索引中的单个字段?

干杯,

亚当

0 投票
1 回答
1810 浏览

nhibernate - PostgreSQL 全文搜索与 NHibernate.Search 通过 Lucene.Net

我正在考虑是否为我当前的项目选择 NHibernate.Search 或 PostgreSQL 的嵌入式全文搜索支持。

正如您已经猜到的,我们在 .NET 平台上使用带有 NHibernate ORM 的 PostgreSQL RDBMS。您对上述全文引擎有什么经验?有什么我应该注意的陷阱吗?

0 投票
5 回答
11109 浏览

sql-server-2005 - 删除 SQL Server 2005 全文索引中的干扰词

在一个非常典型的场景中,我的 Web 应用程序上有一个“搜索”文本框,该文本框将用户输入直接传递给存储过程,然后使用全文索引搜索两个表中的两个字段,这些字段使用适当的键连接。

我正在使用 CONTAINS 谓词来搜索字段。在传递搜索字符串之前,我执行以下操作:

例如,将城堡更改为"the*" OR "castle*"。这是必要的,因为我希望人们能够搜索cas并获得castle的结果。

问题是,既然我已经在每个单词的末尾附加了一个通配符,干扰词(例如the)也附加了一个通配符,因此似乎不再被丢弃。这意味着搜索城堡将返回带有诸如剧院等单词的项目。

将 OR 更改为 AND 是我的第一个想法,但如果随后在查询中使用干扰词,这似乎只是不返回任何匹配项。

我想要实现的只是允许用户输入多个空格分隔的单词,这些单词代表他们正在搜索的单词的全部或前缀,以任何顺序 - 并从他们的输入中删除诸如the 之类的噪声词(否则当他们搜索城堡时,他们会得到一个很大的项目列表,他们需要的结果位于列表中间的某个位置。

我可以继续实现我自己的噪声词去除程序,但这似乎是全文索引应该能够处理的事情。

感谢您的帮助!

杰米

0 投票
1 回答
173 浏览

.net - 我需要全文搜索吗?如果需要,如何在 sql2000 上实现全文搜索?

我在我的 asp.net mvc 项目中使用 Linq2Sql,到目前为止效果很好。然而,现在我需要实现一个“关键字搜索”,在大约 20 个字段中搜索 x 关键字,这些字段分布在 10 个连接表中,这些连接表的最大深度为 3 级。linq 函数确实很简单,但是生成的查询太慢了(2 个单词大约需要 25 秒)。我实现了一些缓存,但只是缓存不会削减它。我自己尝试了一个存储过程并稍微改进了它,但优化非常有限。

现在我阅读了全文搜索,如果我做对了,这看起来就像我所需要的。谁能证实这一点?系统需要在SQL2000上运行。如果 FTS 是我需要的,有人可以帮助我如何设置它吗?它是内置在 SQL2000 中的吗?我需要其他图书馆/服务吗?

0 投票
9 回答
21924 浏览

sql - SQL全文搜索与“LIKE”

假设我有一个相当简单的应用程序,它允许用户在他们拥有的 DVD 上存储信息(标题、演员、年份、描述等),我希望允许用户通过这些字段中的任何一个搜索他们的收藏(例如“Keanu Reeves”或“矩阵”将是有效的搜索查询)。

使用 SQL 全文搜索与简单地将查询按空格分开并在 SQL 语句中执行一些“LIKE”子句有什么优势?它只是表现得更好,还是实际上会返回更准确的结果?

0 投票
5 回答
629 浏览

sql-server - 添加许多记录后的 SQL Server FTS 性能

我们有一个 Web 应用程序,允许客户管理大量名称列表。为了在这些列表中进行搜索,我们使用 SQL Server 2008 的 FTS,它通常运行良好。我们最大的客户拥有 900,000 个姓名,并享有亚秒级的搜索时间。

然而,对于另一个新客户端,我最近导入了 150,000 个名称,性能很糟糕(例如,服务器非常糟糕)。我检查了全文索引器,它声称最近完成了一次爬网。

查看执行计划,我注意到在快速情况下(对于较大的客户端),SQL Server 首先执行 FTS,然后对结果执行索引搜索。对于较新的客户端,它首先进行索引搜索(显然,对于新记录,150,000 次),然后进行 FTS。

所以我尝试了 WITH(INDEX(MyFullTextIndex)) 提示,但 SQL Server 说索引不存在。显然,它不认为这些 FTS 索引是“真正的”索引。如何强制 SQL Server 始终首先使用 FTS?

更新:我尝试重新生成统计信息,但无济于事。同样的性能问题。

以下是执行计划:

快速性能: http: //frameaction.com/LLExecutionPlan01.sqlplan

性能缓慢:http: //frameaction.com/LLExecutionPlan18.sqlplan

0 投票
1 回答
1172 浏览

sql - 如何:匹配(搜索空间)与(与其他表中的列连接)

我不擅长 SQL 查询,所以这可能是一个愚蠢的问题。但是,这大致是我想做的事情:

表语料库//我想通过标题正文搜索的东西...

表搜索//要应用于语料库的搜索词列表 term
...

我想写的查询或多或少如下:我相信我需要某种连接,但我不知道该怎么做。此外,我不确定 against() 运算符是否会采用除文字之外的任何内容 - 文档似乎没有提及任何一种方式。

select * from corpuses where match (title, body) against (select term from search);

我正在使用 MySQL 5

任何想法都非常感谢。

谢谢!布赖恩

0 投票
5 回答
18552 浏览

sql-server - SQL Server 2008 全文搜索 (FTS) 与 Lucene.NET

我知道过去有关于 SQL 2005 与 Lucene.NET 的问题,但自 2008 年问世以来,他们对其进行了很多更改,并且想知道是否有人可以给我优点/缺点(或链接到文章)。