Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 索引许多传入文件_Mysql_Search_Lucene_Indexing_Full Text Search - Fatal编程技术网

Mysql 索引许多传入文件

Mysql 索引许多传入文件,mysql,search,lucene,indexing,full-text-search,Mysql,Search,Lucene,Indexing,Full Text Search,我正在尝试编写一个全文搜索应用程序,每5分钟索引近10000个传入文件。现在,在任何人建议Lucene、Solr、Sphinx、ElasticSearch等之前,我都不允许使用这两种。所以我基本上是在阅读关于建立索引的内容。具体来说,我被限制使用MySQL(或任何其他RDBMS)来存储索引(而不是文件) 我对Lucene所知甚少的是,它的核心是一个反向指数。我试图通过创建word数据库和包含它们的相应文件来复制这一点。(同样,我不能使用Lucene使用的文档) 我正在运行一个cron作业,每5分

我正在尝试编写一个全文搜索应用程序,每5分钟索引近10000个传入文件。现在,在任何人建议Lucene、Solr、Sphinx、ElasticSearch等之前,我都不允许使用这两种。所以我基本上是在阅读关于建立索引的内容。具体来说,我被限制使用MySQL(或任何其他RDBMS)来存储索引(而不是文件

我对Lucene所知甚少的是,它的核心是一个反向指数。我试图通过创建word数据库和包含它们的相应文件来复制这一点。(同样,我不能使用Lucene使用的文档)

我正在运行一个cron作业,每5分钟检查一次是否上传了新文件并将其放入队列。对于队列,运行Java代码,创建索引并将其存储在mysql表中。当我们处理一些文件时,所有这些FCFS都很好。但由于每5分钟就有10000个文件进入,索引将花费大量时间。那么,每次推送新文件时生成一个线程是否是最佳选择?这将导致在我的服务器上运行数千个线程,而我的服务器已经在执行其他任务。处理这项任务的最佳方式是什么

我的另一个问题是: 据我所知,Lucene使用跳过列表来存储包含单词的文档列表。大概是这样的:


然而,由于MySQL的使用,我不能使用skip list,而是必须进行非规范化,并面临大量冗余。有什么办法可以解决这个问题吗?

要完成这项工作,您必须将文件的文本加载到MySQL表中,然后创建全文索引

如果您试图创建一个方案,通过该方案可以搜索文本并返回文件名,那么您可以使用这些列

 id   (autoincrement)
 filepath  (path name for the file)
 serialno  (when whole file is too long for one filetext column, it can be split)
 filetext  text from the file.
请注意,可以使用全文索引对列中的字符数进行索引是有限制的。如果将
filetext
列的长度限制为700个字符,就可以了。这意味着您必须在加载表时,在单词边界上将文件文本拆分为该表中的多行

有一个停止字列表:未编入索引的字


使用全文搜索对您来说应该相当有效。正如你所知,如果你想要高性能的文本搜索功能,Lucene提供了很多全文没有的功能。

谢谢你回答mysql中的全文搜索功能。但是如果你注意到我提到过“我被限制使用MySQL(或任何其他RDBMS)来存储索引(而不是文件)”,那么我不能使用你的方法。???您正在我的方法中存储索引。每行包含对该文件的引用。如果您指的是我的建议,即将每个文件中的文本放入一个表中,那么重点是表就是索引。我不相信有任何方法可以为你的文件编制索引,这样他们的内容就可以在不将内容放入索引的情况下进行搜索。