2

我以前从未遇到过像 Zend Search Lucene 这样的应用程序/类,因为我一直在查询我的数据库。

Zend_Search_Lucene 将文档作为索引的原子对象进行操作。一个文档被划分为命名字段,并且字段具有可以搜索的内容。

一个文档由 Zend_Search_Lucene_Document 类表示,并且这个类的这个对象包含 Zend_Search_Lucene_Field 的实例,这些实例表示文档上的字段。

需要注意的是,任何信息都可以添加到索引中。特定于应用程序的信息或元数据可以存储在文档字段中,然后在搜索期间与文档一起检索。

所以这基本上是说我可以将它应用于包括数据库在内的任何东西,这里的关键是为搜索创建索引。

我试图掌握的是我应该在我的应用程序中确切地将索引存储在哪里,例如我们将手机存储在数据库、制造商、型号中——我应该如何对索引进行分类?

如果我正在为用户创建索引,地址我显然不希望他们公开可见,我只是对这一切如何一起工作感到困惑,如果有已知的缺点,我在使用时应该知道的任何陷阱它。

4

1 回答 1

3

Lucene 索引存储在数据库之外。我会将它作为控制器、模型和视图的姐妹存储在“数据”目录中。但是您可以将其存储在任何地方;您只需要在打开索引进行查询时指定路径。

它基本上是存储在数据库中的文档的冗余副本,您必须自己使它们保持同步。这是缺点之一:您必须编写代码以根据对数据库的查询结果来填充 Lucene 索引。当您向数据库添加数据时,您还必须更新您的 Lucene 索引。

使用外部全文索引解决方案的一个优势是可以减少 RDBMS 的工作量。要查找文档,请使用 Lucene API 执行搜索。结果应包括一个包含主键值的字段(作为文档的一部分,但无需对其进行分析以进行 FT 搜索)。当您执行 Lucene 搜索时,您会返回此字段,因此您可以在数据库中查找相应的行。

这有助于回答你的问题吗?

我最近为 MySQL 大学做了一个比较全文搜索解决方案的演讲:http: //forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

我还在http://www.SlideShare.net/billkarwin上发布了我的幻灯片。

于 2009-12-12T21:16:49.107 回答