问题标签 [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 投票
12 回答
3725 浏览

c++ - 在文本中搜索 25 000 个单词

我需要在文本中找到约 25 000 个单词的出现。为此目的最合适的算法/库是什么?

目标语言是 C++

0 投票
6 回答
8191 浏览

sql - 在 SQL Server 索引中搜索单词

我需要介于全文搜索和索引搜索之间的东西:
我想在表格的一列中搜索文本(如果重要的话,该列上也可能会有一个索引)。

问题是,我想在列中搜索单词,但我不想匹配部分。

例如,我的专栏可能包含公司名称:
Mighty Muck Miller and Partners Inc.
Boy & Butter Breakfast company

现在,如果我搜索“ Miller ”,我想找到第一行。但是如果我搜索“ iller ”我不想找到它,因为没有以“iller”开头的单词。但是,搜索“ Break ”应该会找到“ Boy & Butter Breakfast company ”,因为有一个词以“ Break ”开头。

所以如果我尝试使用

它会发现太多的点击。

有没有办法搜索由空格或其他分隔符分隔的单词?

(LINQ 最好,纯 SQL 也可以)

重要提示:到目前为止,空格并不是唯一的分隔符!应该考虑使用斜线、冒号、点、所有非字母数字字符!

0 投票
6 回答
3363 浏览

algorithm - 对日志进行快速文本搜索

这是我遇到的问题,我有一组可以很快增长的日志。它们每天都被拆分成单独的文件,并且这些文件可以很容易地增长到一个演出的大小。为了帮助缩小规模,超过 30 天左右的条目将被清除。

问题是当我想在这些文件中搜索某个字符串时。现在,Boyer-Moore 搜索速度慢得令人难以置信。我知道像 dtSearch 这样的应用程序可以使用索引提供非常快速的搜索,但我不确定如何在不占用日志已经占用两倍空间的情况下实现它。

有什么我可以查看的资源可以提供帮助吗?我真的在寻找一种标准算法,它可以解释我应该做什么来构建索引并使用它来搜索。

编辑:
Grep 不起作用,因为此搜索需要集成到跨平台应用程序中。我无法将任何外部程序加入其中。

它的工作方式是有一个带有日志浏览器的 Web 前端。这与自定义 C++ Web 服务器后端对话。该服务器需要在合理的时间内搜索日志。目前搜索几场日志需要很长时间。

编辑 2:其中一些建议很棒,但我必须重申,我不能集成另一个应用程序,它是合同的一部分。但为了回答一些问题,日志中的数据与接收到的医疗保健特定格式的消息或与这些相关的消息不同。我希望依赖索引,因为虽然重建索引可能需要一分钟,但目前搜索需要很长时间(我已经看到它最多需要 2.5 分钟)。此外,很多数据在记录之前就被丢弃了。除非打开某些调试日志记录选项,否则会忽略一半以上的日志消息。

搜索基本上是这样的:Web 表单上的用户会看到最新消息的列表(当他们滚动时从磁盘流式传输,是的 ajax),通常,他们会想要搜索包含一些信息的消息它,可能是患者 ID,或者他们发送的一些字符串,因此他们可以将字符串输入到搜索中。搜索被异步发送,自定义 Web 服务器一次线性搜索 1MB 的日志以获取某些结果。当日志变大时,此过程可能需要很长时间。这就是我要优化的。

0 投票
13 回答
7903 浏览

python - 构建全文搜索引擎:从哪里开始

我想使用Google App Engine编写一个 Web 应用程序(所以参考语言是Python)。我的应用程序需要一个简单的搜索引擎,以便用户能够找到指定关键字的数据。

例如,如果我有一个包含这些行的表:

1 办公空间
2 2001:太空漫游
3 巴西

并且用户查询“空间”,将返回第 1 行和第 2 行。如果用户查询“办公空间”,结果也应该是第 1 行和第 2 行(第 1 行在前)。

以简单的方式执行此操作的技术指南/算法是什么?
你能给我指出这背后的理论吗?

谢谢。

编辑:我不是在这里寻找任何复杂的东西(例如,索引大量数据)。

0 投票
4 回答
1289 浏览

sql - 如何构建数据以实现可搜索性

我正在为音乐播放列表编写一个搜索应用程序。

流派和文件格式因播放列表而异,有时在播放列表中也存在差异。还有一个“同义词”标签的概念(例如,urban 将涵盖 hiphop 和 r&b,但反之则不然)。

以下是搜索词列表和我的预期结果。

福音:应该返回至少包含一首福音歌曲的所有播放列表。包含所有福音歌曲的播放列表将首先显示。urban:应该返回所有的 r&b 和 hiphop。再次将所有城市曲目的播放列表排在第一位。hiphop:应该返回所有 hiphop 但不返回 r&b。flac:应该返回所有包含 flac 文件的播放列表。从纯flac的开始。hiphop flac:应该首先返回 hiphop flac,然后是其他 hiphop 音频 hiphop AND flac:应该只返回 hiphop flac 嘻哈音频:应该返回 hiphop flac、hiphop mp3 等

当我刚刚开始这个项目时,我正在考虑索引所有这些的最佳方法。像 Lucene 这样的全文搜索在这里有用吗?注意我没有任何描述这些播放列表的文本,但我可以生成一些。

我正在考虑将所有这些术语组织为“标签”并将它们存储在多对多的数据库中。

表:播放列表(pk(id),desc)表:标签(pk(id),desc)表:playlist_has_tag(pk(link_id,tag_id))

解决都市==嘻哈|| rnb 的事情,我可能会添加一个 tag_synonyms 表:

表:tag_synonyms ( pk(tag_id, synonym_tag_id) )

然后我有两条记录表明urban包含hiphop和rnb:urban的tag id,hiphop的tag id urban的tag id,rnb的tag id

我觉得虽然使用这种方法查询可能会变得非常复杂。

CouchDB 可以在这里使用吗?我目前正在使用 PostgreSQL。是否有一些软件可以使这种事情变得容易?

我希望将来能够深入研究并支持复杂的搜索词,例如:

(嘻哈或房子)和文件类型:mp3 和艺术品:没有

并且还包含持续时间等内容。

0 投票
5 回答
1311 浏览

sql-server-2005 - SQL 2005 全文目录随机 sloooowww

我在一个 SQL 2005 机器上构建了一个全文目录,在它重新构建过程完成后,运行速度非常慢。我已经实现了一个 hack(即 try...catch{do again}),这样我的用户就不会收到超时错误;这让我内心感觉很糟糕。所有后续查询都快如闪电。

有没有人遇到过这个问题并且有/是否有解决方案?谢谢!

PS是的,我已经谷歌了很多次。即使用我的左手。

0 投票
5 回答
29781 浏览

sql-server - 7645 Null 或空全文谓词

我有一个在 SQL2005 上运行良好的查询,但是将数据库移动到 SQL2008 给了我标题中的错误。

出现问题的代码是使用空参数调用 CONTAINS、CONTAINSTABLE 或 FREETEXT。但是我试图只在有这样的值时打电话或加入

或者

但是我找不到任何解决方法可以在 SQL2008 上运行。有任何想法吗?

我知道我可以执行动态 SQL 或使用两种不同情况的 if 语句(使用 FT 连接选择,选择没有 FT 连接。有什么更好的解决方法不需要这样做吗?

0 投票
1 回答
5385 浏览

sql-server - 如何为全文搜索中的不同列分配权重?

在我的全文搜索查询中,我想为特定列分配更高的权重。考虑这个查询:

现在,我希望 Name 列在结果中具有更高的权重(Name、Keywords 和 Location 是全文索引的)。目前,如果在三列中的任何一列中找到结果,则排名不受影响。

例如,我希望名称为“Chilly Chicken”的行比关键字“Chilly Chicken”的行具有更高的排名,但要使用另一个名称。

编辑:

我不急于使用 ContainsTable,因为这意味着分离短语(Chilly AND Chicken 等),这将涉及我必须搜索所有可能的组合 - Chilly AND Chicken、Chilly OR Chicken 等。我想要FTS 引擎自动找出最匹配的结果,我认为 FREETEXT 以这种方式做得很好。

如果我误解了 CONTAINS/CONTAINSTABLE 的工作原理,我深表歉意。

0 投票
5 回答
2804 浏览

c# - 将全文搜索与 SQL Server 结合起来有多难?

我正在构建一个带有 SQL 后端的 C#/ASP.NET 应用程序。我在截止日期前完成我的页面,在左侧字段之外,我的一位设计师在我的一个页面上合并了全文搜索。到目前为止,我的“搜索”一直是过滤器,能够通过某些因素和列值缩小结果集。

由于我在截止日期前(你知道每晚睡 3 个小时,在我看起来像猫吃东西并呕吐的地方),我期待这个页面与其他页面非常相似,我正在尝试决定是否制造臭味。我以前从未在页面上进行过全文搜索......这是一座要爬的山还是有一个简单的解决方案?

谢谢你。

0 投票
1 回答
604 浏览

sql-server - 将搜索文本规范化为全文搜索和 where 条件

您想要的是用户只需像在 Google 中一样输入他们的搜索条件。一些单词,可能是一些引用的短语,可能是一些运算符,然后让它正常工作。

.Net 解决方案可在此处获得: http ://ewbi.blogs.com/develops/2007/05/normalizing_sql.html

我正在寻找一个也支持 where 的纯 T-SQL 版本。(或 VbScript/javascript)

示例:“狗”粮价格:20..45

应该看起来像这样(对于 mssql): select * from table t join containstable(desc, '"dog" and food*') k on k.key=t.id where t.price 在 20 到 45 之间

运算符:and、or、near、""、not、* 等。