如果用户搜索在solr索引中非常常见的关键字,我希望能够返回有用的记录。例如education
。
在这种情况下,接近99%的记录会包含该单词。所以搜索这个词或类似词需要很长时间。
这是针对ColdFusion上的 solr ,但我对那些孤立的解决方案持开放态度。
现在我正想着提出一系列停用词并阻止这些搜索完全发生。
答案 0 :(得分:2)
如果搜索需要很长时间,可能是因为您没有限制返回的结果数量。 <cfsearch>
标记具有maxrows
属性以及startrow
属性,您可以使用该属性来限制或分页数据。或者,您可以通过<cfhttp>
电话直接致电Solr的网络服务:
<cfhttp url="http://localhost:8983/solr/<collection_name>/select/?q=<searchterm>&fl=*,score&rows=100&wt=json" />
Solr默认返回10行;您可以使用rows
参数更改此设置。您也可以使用start
参数(请注意,Solr从0开始计数而不是1)。我相信这个解决方案更灵活,特别是如果你使用的是CF 9,因为它允许你在对除分数之外的字段进行排序时进行分页。
您可以在此处找到更多详细信息: http://www.thefaberfamily.org/search-smith/coldfusion-solr-tutorial/
答案 1 :(得分:0)
如果用户只搜索一个非常常见的术语,那么您需要限制结果并建议用户匹配太多。
在更一般的情况下,您希望执行两次通过(至少)方法。获取搜索字词并执行查找以确定其“共同点”。您希望首先根据最不常见的术语进行过滤,最后使用更常见的术语。
例如,用户搜索serendipitous education
。您确定serendipitous
有11个匹配,education
有900000个匹配。因此,您首先应用serendipitous
过滤器,从而产生11个匹配项。然后应用education
过滤器,产生7场比赛。
快速搜索的关键是索引和预先计算的统计信息。如果您手头有这样的统计数据,您可以动态创建优化方法。