【发布时间】:2010-04-30 17:54:39
【问题描述】:
我必须为应该一起搜索的不同类型的数据(文本文档、论坛消息、用户个人资料等)编制索引(即,一次搜索将返回不同类型数据的结果)。
拥有多个索引的优缺点是什么,每种数据类型一个索引?
以及为各种数据使用单一索引的优缺点?
谢谢。
【问题讨论】:
标签: lucene
我必须为应该一起搜索的不同类型的数据(文本文档、论坛消息、用户个人资料等)编制索引(即,一次搜索将返回不同类型数据的结果)。
拥有多个索引的优缺点是什么,每种数据类型一个索引?
以及为各种数据使用单一索引的优缺点?
谢谢。
【问题讨论】:
标签: lucene
如果您想一次搜索所有类型的文档,最好保留所有 类型到一个索引。在索引中,您可以定义更多要标记化或矢量化的字段类型。 向每个 IndexSearcher 引入包含索引的目录需要一些时间。
如果您想单独搜索术语,最好将每种类型索引到一个索引。 单索引比多索引更具结构性。
另一方面,我们可以用多个索引来平衡我们的负载。
【讨论】:
不一定要回答您的直接问题,但是... ;)
我会使用一个索引,为该类型添加一个关键字(索引,存储)字段,它可以让您在需要时进行过滤,并告诉您收到的结果之间的区别。
(也许在您的问题中......使用单独的索引将允许每个语料库拥有自己的相关性分数,不知道一个语料库中过度重复的术语是否会影响其他文档的相关性?)
【讨论】:
您应该从逻辑上思考每个数据集包含的内容,并按主题或其他标准(例如地理、业务部门等)设计索引。作为一般规则,您的索引架构类似于您的数据库方式(例如,即使技术上可行,您也可能不会将会计与人事数据库结合起来)。
正如@llama 所指出的,创建单个 uber-index 会影响相关性分数、安全/访问问题等,并引发一系列全新的问题。
总结:根据您的业务需求考虑逻辑分区结构。如果没有进一步的背景,将很难解释。
【讨论】:
同意每种数据都应该有自己的索引。以便可以相应地设置所有索引选项 - 例如字段分析器,为术语向量和类似字段存储的内容。并且还能够在针对不同类型的数据重新打开/提交 IndexReaders/Writers 时使用不同的动态。
一个明显的缺点是需要处理多个索引而不是一个。为了使它更容易,并且因为我总是使用多个索引,创建了一个小库来处理它:Multi Index Lucene Manager
【讨论】: