我必须在solr中为大约1000万个文档建立索引,以便进行全文搜索。这些文档中的每个文档都附加了大约25个附加的元数据字段。每个元数据字段都很小(最多64个字符)。常见的查询将涉及搜索项以及用于过滤数据的多个元数据字段。所以我的问题是哪个能提供更好的性能wrt搜索响应时间。(索引时间不是问题):
a.为文本数据建立索引,并将所有元数据字段作为存储字段推送到solr中,并使用单个查询查询所有字段的solr。(有效地,solr使用元数据以及搜索进行过滤)
b.将元数据字段存储在数据库中,如Mysql。仅对全文使用solr,然后使用从solr返回的文档ids作为数据库的输入,根据其他元数据进行过滤,以检索最终的文档集。
谢谢Arijit
发布于 2012-08-11 23:51:21
绝对是a)。Solr不仅仅是一个全文搜索引擎,它还有更多的功能。它的过滤器查询至少和MySQL select一样好/快。
b)是愚蠢的。通过选择具有正确元数据的it从MySQL获取多个it,在Solr中执行全文搜索,同时根据it列表进行过滤,从MySQL或Solr获取文档(如果您选择在其中存储数据,而不仅仅是索引)。我无法想象这样做会更快。
发布于 2012-08-12 06:20:29
为什么要把事情复杂化,特别是如果索引时间和硬盘空间不是问题的话,你应该把你所有的数据(意思是:用户需要的子集)存储在Solr中。
例外情况是,如果您在每个文档中存储(和检索)大量文本。在这种情况下,在获得搜索结果后,从RDB获取它会更快。无论如何,没有人能确定在您的情况下哪种方法更快,所以我建议您测试这两种方法的性能(例如使用JMeter )。
另外,因为你不关心索引时间,所以你应该在索引时而不是在查询时做所有你能做的处理(例如同义词,它们可以替换boosting的有效负载,...)。
有关Solr性能的更多信息,请参阅此处:
http://wiki.apache.org/solr/SolrPerformanceFactors
https://stackoverflow.com/questions/11915925
复制相似问题