Solr减少了搜索时间

时间:2015-09-17 06:43:41

标签: sql-server performance solr

我是索尔的新手。我已经为一个SQL Server表索引了大约14列,其中有30万条记录进入Solr。索引最多需要15分钟。我存储了所有字段。所以我不必回到sql server查询。基本上我使用solr作为数据库并直接搜索它。没有唯一的密钥,但我只搜索了一个我搜索的列。 此列始终只包含1个字。

此列上的每次搜索都不会产生超过200条记录。在响应标题中 - 对于每个新的搜索文本 - 我可以看到QTime有时会是150,200,1350毫秒。我希望将其降低到不到50毫秒。

" responseHeader":{     "状态":0,     " QTime":150   },

我是否可以通过进行一些小的配置更改而不进行分片来实现? 编辑添加: 我正在使用Solr 5.3.0。我没有排序或使用facet等。我的架构XML是:

<fields>        
    <field name="Postcode"                          type="string" indexed="true" stored="true" required="true" />        
    <field name="PostTown"                          type="string" indexed="false" stored="true" required="true" />              
    <field name="DependantLocality"                 type="string" indexed="false" stored="true" required="false" />
    <field name="DoubleDependantLocality"           type="string" indexed="false" stored="true" required="false" />
    <field name="ThoroughfareName"                  type="string" indexed="false" stored="true" required="false" />
    <field name="ThoroughfareDescriptor"            type="string" indexed="false" stored="true" required="false" />
    <field name="ApprovedAbbreviation"              type="string" indexed="false" stored="true" required="false" />
</fields>

我已在邮政编码上编入索引,目前我只搜索Solr管理网站,如:邮编:WA168GS

谢谢。

1 个答案:

答案 0 :(得分:0)

solr查询的性能取决于几个因素。

  1. 启动solr服务器时为JVM(Heap)提供了多少内存。现在来了,如何使用这个记忆。 Solr为您提供三种不同类型的缓存,用于缓存以前的搜索结果。
    • filterCache:存储Solr构建的过滤器,以响应添加到查询中的过滤器。如果您使用velvet pants等过滤器参数搜索fq=category:apparel,Solr将为该类别构建过滤器并将其添加到其缓存中。
    • queryResultCache:存储查询返回的文档ID集。
    • documentCache:此缓存包含Lucene Document对象(每个文档的存储字段)。
  2. 因此,当您使用term和一些过滤器参数进行查询时,solr会在内部进行两次搜索,一次针对实际术语,另一次针对您提供的每个过滤条件。然后合并结果。如果任何部分已经在缓存中可用,那么它将直接从那里使用它。应配置sizeinitialSizeautowarmCount参数,以便获得快速结果。您可以在此处找到有关solr cache的更多信息。

    1. 您应该在openSearcher配置中将false标记为autoCommit。因为每次硬提交发生时它都会打开一个新的索引搜索器实例。您应该使用autoSoftCommit配置将新索引加载到搜索器而不是硬提交。
    2. 您需要使用这些参数来调整solr以进行快速搜索查询。