Questions tagged «full-text-search»

在数据库中搜索文档集合的文本或自由文本字段,以查找包含一个单词或单词组合的文档。

2
MySql中的VARCHAR字段上可能的INDEX
我正在使用这样的表在MySql数据库中工作: +--------------+ | table_name | +--------------+ | myField | +--------------+ ...并且我需要进行很多这样的查询(列表中有5-10个字符串): SELECT myField FROM table_name WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...) 大约有24.000.000个唯一行 1)我应该使用FULLTEXTor或and INDEX键VARCHAR(150)吗? 2)如果我将字符数从150增加到220或250 ...会产生很大的不同吗?(有什么方法可以计算出来吗?) 3)正如我所说,它们将是唯一的,因此myField应该是PRIMARY KEY。在已经是VARCHAR INDEX / FULLTEXT的字段中添加PRIMARY KEY难道不是很罕见吗?


1
全文索引维护准则
维护全文索引应考虑哪些准则? 我应该重新构建或重新组织全文目录(请参阅BOL)吗?什么是合理的维护节奏?可以使用什么启发式方法(类似于10%和30%的碎片阈值)来确定何时需要维护? (下面的所有内容只是有关此问题的详尽信息,并显示了我到目前为止的想法。) 额外信息:我的初步研究 有关b树索引维护的资源很多(例如,该问题,Ola Hallengren的脚本以及其他站点上有关该主题的大量博客文章)。但是,我发现这些资源都没有提供用于维护全文索引的建议或脚本。 有微软的文档是提到整理基表的B树索引,然后对全文目录执行REORGANIZE可以提高性能,但它并没有任何更具体的建议碰。 我也发现了这个问题,但它主要集中在变更跟踪(如何将对基础表的数据更新传播到全文索引中),而不是可以最大程度地提高索引效率的定期维护类型。 额外信息:基本性能测试 此SQL Fiddle包含可用于创建具有AUTO更改跟踪的全文本索引的代码,并在修改表中的数据时检查索引的大小和查询性能。当我在生产数据的副本(而不是小提琴中的人造数据)上运行脚本的逻辑时,以下是在每个数据修改步骤之后看到的结果的摘要: 即使此脚本中的update语句设计得相当不错,但这些数据似乎表明定期维护有很多好处。 额外信息:初步构想 我正在考虑创建每晚或每周的任务。看来此任务可以执行REBUILD或REORGANIZE。 因为全文索引可能非常大(数以千万计的行),所以我希望能够检测目录中的索引何时足够零散,以确保需要进行REBUILD / REORGANIZE。对于哪种启发式方法可能有意义,我还不清楚。

3
LIKE如何实施?
谁能解释一下LIKE运算符如何在当前数据库系统(例如MySQL或Postgres)中实现?还是让我参考一些解释它的参考文献? 天真的方法是检查每条记录,在感兴趣的字段上执行正则表达式或部分字符串匹配,但是我有一种感觉(希望),这些系统做得更聪明。

2
Trigram搜索随着搜索字符串变长而变慢
在Postgres 9.1数据库中,我有一个table1约150万行和一列的表label(为方便起见,使用简化名称)。 上有一个功能性trigram-index lower(unaccent(label))(unaccent()已使其不可变,以允许在索引中使用)。 以下查询非常快: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms 但是以下查询速度较慢: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms 即使搜索更加严格,添加更多单词的速度甚至会更慢。 我尝试了一个简单的技巧,即先对第一个单词运行子查询,然后对完整的搜索字符串进行查询,但是(不幸的是)查询计划者看到了我的想法: EXPLAIN ANALYZE SELECT * FROM ( SELECT …

1
资源池“内部”中没有足够的系统内存来运行此查询
我们的其中一台生产服务器正在报告日志中的错误 错误:701,严重性:17,状态:123 。资源池“内部”中没有足够的系统内存来运行此查询。 我搜索了此错误,发现它是一个错误,并且Service Pack 2有一个热修复程序。这些是服务器的详细信息: Microsoft SQL Server 2008 R2(SP2)-10.50.4000.0标准版(64位) 处理器数量:24(具有2个NUMA节点,每个节点具有12个内核) 内存:为SQL Server分配了24GB RAM。 查询批量/分钟:5000+ 我的问题是 为什么会出现此错误? 这是一个严重的问题吗? 我们该如何解决? 编辑内存状态: MEMORYBROKER_FOR_RESERVE (internal) Pages ---------------------------------------- ---------- Allocations 200362 Rate 4510 Target Allocations 200362 Future Allocations 588626 Overall 2521497 Last Notification 0 MEMORYBROKER_FOR_STEAL (internal) Pages ---------------------------------------- ---------- Allocations 431548 Rate 1973 …

1
从GIN索引的TSVECTOR列获取部分匹配
我想通过查询获得结果: SELECT * FROM ( SELECT id, subject FROM mailboxes WHERE tsv @@ plainto_tsquery('avail') ) AS t1 ORDER by id DESC; 这可以正常工作并返回tsv包含的行Available。但是,如果我使用avai(放置lable),它什么也找不到。 所有查询都必须在字典中吗?我们不能只查询这些字母吗?我有一个包含电子邮件正文(内容)的数据库,我希望它随着每秒的增长而快速发展。目前我正在使用 ... WHERE content ~* 'letters`

5
SQL Server 2008全文索引似乎从未完成
我们的网站具有一个SQL Server 2008 R2 Express Edition数据库,该数据库具有用于我们网站搜索的全文索引。每次在其中一个索引表中添加或更新新记录时,索引过程似乎永远不会完成。 在过去的几周中,我一直在使用此网站上的基本相同的查询来监视状态:http : //www.sqlmonster.com/Uwe/Forum.aspx/sql-server-search/2155/Why-is-this这么长时间的人口 这是我运行查询时看到的(单击以查看完整大小): 索引表中的最新记录永远不会完成,并且不可搜索。即使表中没有太多数据,我也已经等了几天看索引是否完成,但是什么都没有改变。 我能够成功完成索引编制的唯一方法是重建目录或删除并重新创建所有索引。 每次这样做,一旦添加了第一个新记录,就会再次出现相同的问题。 以下是服务器统计信息,以防万一: 四核AMD Opteron 2.34GHz 4GB RAM Windows Server 2008 R2企业SP1 x64 具有高级服务x64的SQL Server 2008 R2 Express Edition


4
全文搜索导致“全文初始化”中花费大量时间
我目前正在尝试对Stack Overflow注释的数据转储运行一些查询。架构如下所示: CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) ) ENGINE=InnoDB …


1
为什么在MySQL的FULLTEXT索引上,LIKE比MATCH…AGAINST快4倍以上?
我不明白这一点。 我有一张带有这些索引的表 PRIMARY post_id INDEX topic_id FULLTEXT post_text 表具有(仅)346 000行。我正在尝试执行2个查询。 SELECT post_id FROM phpbb_posts WHERE topic_id = 144017 AND post_id != 155352 AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar') 需要4.05秒,而 SELECT post_id FROM phpbb_posts WHERE topic_id=144017 AND post_id != 155352 AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%') 需要0.027秒。 EXPLAIN显示唯一的区别是possible_keys(fulltext包括post_text,LIKE没有) 真的很奇怪 这背后是什么?后台发生了什么事?LIKE不使用索引时怎么能这么快,而使用FULLTEXT时却那么慢呢? UPDATE1: 实际上,现在大约需要0.5秒,也许表已锁定,但是,当我打开分析时,它表明FULLTEXT INITIALIZATION花费了0.2秒。这是怎么回事? 我LIKE每秒查询表10次​​,全文查询2次 UPDATE2: 惊喜! …

1
具有Advanced Services的SQL Server 2014 Express是否实际上支持全文搜索?
我已经安装了具有高级服务的SQL Server 2014 Express版。我希望尝试全文搜索功能。我在这里阅读到,2014 Express Edition支持全文本搜索。但是,在安装并尝试创建全文索引后,出现错误,指出此版本的sql server不支持全文索引。 实际是否支持全文索引?我是否有可能安装了错误的版本(不是高级服务)?为了确定,我已经卸载并重新安装了两次,但是两次都相同。我很肯定我正在使用高级服务安装程序进行安装。 我使用的是Windows 7(64位)。

1
SSMS 2008 R2中的全文本索引在哪里
我使用SQL Server Management Studio创建了一个新的数据库,一些表以及全文索引和目录,没有任何问题。我想为每个复制T-SQL创建脚本,以将它们包括在我的文档中。我可以获取数据库,表,外键和目录的创建脚本,但是似乎找不到全文索引。我已经检查了相关表的Script Table As- > CREATE To,它不在那儿,目录也没有。有任何想法吗?是因为我只运行SQL Server标准版吗?

2
限时降低ORDER BY
我有这个查询: SELECT * FROM location WHERE to_tsvector('simple',unaccent2("city")) @@ to_tsquery('simple',unaccent2('wroclaw')) order by displaycount 我对此感到满意: "Sort (cost=3842.56..3847.12 rows=1826 width=123) (actual time=1.915..2.084 rows=1307 loops=1)" " Sort Key: displaycount" " Sort Method: quicksort Memory: 206kB" " -> Bitmap Heap Scan on location (cost=34.40..3743.64 rows=1826 width=123) (actual time=0.788..1.208 rows=1307 loops=1)" " Recheck Cond: (to_tsvector('simple'::regconfig, unaccent2((city)::text)) …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.