Solr非常慢的过滤器

时间:2014-10-14 20:24:45

标签: solr

我在Solr(版本4.9.1)中使用非常慢的过滤器时遇到问题,有大约50k文档。对于使用特定 category_id 过滤器值的第一个查询,查询需要大约15秒,第二个时间要快得多(需要几毫秒)。但我想总是有快速过滤器:)所以在谷歌搜索后我读到我必须有filterCache和缓存自动装配

Sooo我做过的事情:

filterCache:

   <filterCache
  class="solr.FastLRUCache"
  size="16384"
  initialSize="4096"
  autowarmCount="4096" />

firstSearcher:

<listener event="firstSearcher" class="solr.QuerySenderListener">
            <arr name="queries">
                <lst>
                    <str name="q">*</str>
                    <str name="fq">category_id:1043</str>
                </lst>
            </arr>
        </listener>

        <useColdSearcher>true</useColdSearcher>
        <useFilterForSortedQuery>true</useFilterForSortedQuery>
        <maxWarmingSearchers>2</maxWarmingSearchers>

它不起作用; /不知道为什么......对于这个类别的第一次进入需要15s,而不是快速。但我总是必须对类别和其他过滤器有快速响应。

我做了一个实验,如果我使用mainquery而不是过滤器,一切都会更好,但过滤器应该和mainquery一样快(我在某处读取它)。

要点:

  • 我做错了什么,autowarming不起作用?
  • 如何为每个过滤器/每个过滤器值进行自动装配?

我想做的事情: 好的,我有~50 000个产品和~1000个类别以及许多其他过滤器(类型,价格等)的商店,我的目录基于SOLR(过滤),现在如果我使用过滤器首次进入类别需要15秒,它每次都必须快......

我的示例查询:

    <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">0</int>
        <lst name="params">
            <str name="debugQuery">true</str>
            <str name="website_id:1"/>
            <str name="stats.field">PLN_0_price_decimal</str>
            <str name="product_status:1"/>
            <str name="q">**</str>
            <str name="store_id:1"/>
            <str name="fq">category_id:10561</str>
        </lst>
    </lst>

2 个答案:

答案 0 :(得分:1)

所以,解决方案很简单,我必须在查询中使用*而不是**。

部分调试部分来自响应*:

<str name="parsedquery">MatchAllDocsQuery(*:*)</str>
<str name="parsedquery_toString">*:*</str>

与**:

的响应相同的调试部分
<str name="parsedquery">textSearch:**</str>
<str name="parsedquery_toString">textSearch:**</str>

答案 1 :(得分:0)

第一次使用过滤器时,即使主查询只匹配一对,也需要查看每个文档。您可以禁用此类过滤器的缓存或切换到后置过滤器(通过分配过滤器成本)。更全面的解释是here