如果用户搜索在 solr 索引中非常非常常见的关键字,我希望能够返回有用的记录。例如education
.
在这种情况下,接近 99% 的记录中都会包含该词。所以搜索这个词或类似词需要很长时间。
这是针对ColdFusion 上的 solr 的,但我对仅与 solr 隔离的解决方案持开放态度。
现在我正在考虑提出一个停用词列表,并完全阻止这些搜索发生。
如果用户搜索在 solr 索引中非常非常常见的关键字,我希望能够返回有用的记录。例如education
.
在这种情况下,接近 99% 的记录中都会包含该词。所以搜索这个词或类似词需要很长时间。
这是针对ColdFusion 上的 solr 的,但我对仅与 solr 隔离的解决方案持开放态度。
现在我正在考虑提出一个停用词列表,并完全阻止这些搜索发生。
如果搜索需要很长时间,可能是因为您没有限制返回的结果数量。<cfsearch>
标签有一个maxrows
属性,也有一个属性startrow
,你可以用它来限制或分页数据。或者,您可以通过调用直接调用 Solr 的 Web 服务<cfhttp>
:
<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/
如果用户只搜索一个非常常见的术语,那么您需要限制搜索结果并告知用户匹配项太多。
在更一般的情况下,您希望执行两次(至少)方法。获取您的搜索词并执行查找以确定它们的“共同点”。您希望首先根据最不常用的术语进行过滤,最后根据最常用的术语进行过滤。
例如,用户搜索serendipitous education
。您确定您有 11 个匹配serendipitous
项和 900000 个匹配项education
。因此,您serendipitous
首先应用过滤器,得到 11 个匹配项。然后应用education
过滤器,得到 7 个匹配项。
快速搜索的关键是索引和预先计算的统计信息。如果您手头有这样的统计数据,您可以动态创建优化的方法。