我有一个~1 mil产品文档Solr索引.我还有一大堆UI过滤器,如类别,标签,价格范围,尺寸,颜色和其他一些过滤器.
(q=\*:\*)在fq中的所有其他过滤器中选择所有内容是否是正确的方法?例:
fq=(catid:90 OR catid:81) AND  priceEng:[38 TO 40] AND (size:39 OR size:40 OR size:41 OR size:50 OR size:72) AND (colorGroup:Yellow OR colorGroup:Violet OR colorGroup:Orange  ...  AND (companyId:81 OR companyId:691 OR companyId:671 OR companyId:628 OR companyId:185 OR companyId:602 OR ... AND endShipDays:[* TO 7])
对我来说,从类别到companyIds,颜色和尺寸等的所有内容都只是过滤器.使用这种方法在未来增长中的表现有任何问题吗?我应该在q中放一些查询,哪些?
谢谢,
Jay*_*dra 47
在任何可能的情况下,最好使用普通查询过滤查询.
FilterQuery能够利用FilterCache,与查询相比,这将是一个巨大的性能提升.
为了做出决定,我会看一下有关字段的以下几点:
关于#3的一些注意事项:根据我的经验,我有一个大的索引,每隔几秒就会填充新的文档,而autoSoftCommit也设置为几秒钟.在软提交期间,打开了新的搜索器,这使得缓存无效.所以真正发生了什么,过滤器命中率几乎总是0.我可以说更多:我已经发现第一次过滤查询运行比查询运行更昂贵,所有这些过滤条件都移到"q"而不是" FQ".例如,当我使用"AND"将所有"fq"条件移动到主查询中时,我的查询花了1秒钟进行了5次筛选查询(没有缓存命中)和147ms.但当然,当我停止索引更新时,相同的过滤器查询花了0毫秒,因为使用了缓存.所以这是需要考虑的事情.
您的问题还有其他几点:
希望能帮助到你.
我使用q和fq的方式.我在q和fq上的所有过滤器上应用全文搜索.假设您有字段关键字,您将使用copyField在模式中定义的字段进行全文搜索
<copyField source="id" dest="keyword"/>
<copyField source="category" dest="keyword"/>
<copyField source="product_name" dest="keyword"/>
<copyField source="color" dest="keyword"/>
<copyField source="location" dest="keyword"/>
<copyField source="price" dest="keyword"/>
<copyField source="title" dest="keyword"/>
<copyField source="description" dest="keyword"/>
我的查询看起来像
/select?q={keyword}&fq=category:fashion&fq=location:nyc
/select?q=jeans&fq=category:fashion&fq=location:nyc
正如digitaljoel建议的那样,如果你需要查询多个字段,那么最好使用多个fq(参考上面的查询)而不是使用AND和OR与q
注意:在我的情况下,q default指的是solrconfig.xml中定义的field 关键字
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
     will be overridden by parameters in the request
  -->
 <lst name="defaults">
   <str name="echoParams">explicit</str>
   <int name="rows">10</int>
   <str name="df">keyword</str>
 </lst>
| 归档时间: | 
 | 
| 查看次数: | 61421 次 | 
| 最近记录: |