2009-09-15 92 views
1

我知道在网络上以及SO上有几个关于Lucene中索引和查询性能的主题,但是我还没有找到一个讨论是否(如果有的话,多少?)建立有效载荷将影响查询性能...Lucene中的有效载荷性能

这里的情景......

比方说,我想索引的文件(从100K随时随地集合 - 10M),每个文件都有一个小节是我希望能够单独搜索(或者可能排名较高,取决于在该部分中是否找到了匹配项)。

我正在考虑在该子部分中出现的任何术语中添加有效负载(索引期间),以便在查询时有效地做出该决定。

有谁知道任何与使用有效载荷相关的性能问题,或者甚至更好,你能指点我关于这个话题的任何在线文档吗?

谢谢!

编辑:我欣赏我的方案的替代解决方案,但万一我确实需要在将来使用有效载荷,没有人有关于有关查询性能原始问题的任何意见?

+0

看看Compass(http://www.compass-project.org/),它使得在Lucene之上的这种高性能分层更容易。 – skaffman 2009-09-15 21:40:54

+0

感谢您的建议,我今天下午刚刚遇到了Compass,所以很高兴知道我可能会走在正确的轨道上。如果我有任何运气,我会尽力报告。 – jeremyalan 2009-09-15 21:42:30

回答

1

你想要做什么的教科书解决方案是将每个原始文档索引为两个字段:一个用于完整文档,另一个用于该子部分。您可以在索引期间或检索期间单独提升子部分字段。尽管如此,你可以在这里阅读关于Lucene的有效载荷:Getting Started with Payloads

+0

感谢您的提示。这就是我目前正在做的,我只是觉得可能有更好的方法。你知道任何你能指出的参考资料能支持你的主张吗? – jeremyalan 2009-09-16 13:51:51

+0

您可以尝试: http://www.lucidimagination.com/Community/Hear-from-the-Experts/Articles/Optimizing-Findability-Lucene-and-Solr and http://www.manning.com/ hatcher3 / – 2009-09-16 18:51:29

0

你的用例不适合有效载荷的目的 - 在我看来任何有效载荷信息都是多余的。

有效负载附加到单个文档中的术语出现,而不是文档/术语对。为了存储和访问有效载荷,您必须使用文档内出现的术语偏移量。在你的情况下,如果你知道偏移量,你应该能够计算出现术语的哪个部分,而不使用有效载荷数据。

更广泛的问题是有效载荷对性能的影响。我的经验是,正确使用时,有效负载实施占用更少的空间,比我以前使用的任何解决方法都快。对磁盘空间的最大影响是当前使用Field.setOmitTermFreqAndPositions(true)来减少索引大小。您将需要包含使用有效载荷的位置,这可能会使索引更大。