2011-10-03 24 views
3

希望在3.4.0版中增加一些(非常)緩慢的solr查詢的指針。數字字段的SQL BETWEEN的Solr等效物

我有一個約6百萬文件的索引。每個文件都很小,並且包含兩個solr.TrieDoubleField s; 「開始」和「結束」。

<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
---- 
<field name="start" type="double" indexed="true" stored="false" /> 
<field name="end" type="double" indexed="true" stored="false" /> 

當查詢我需要執行的SQL相當於:

WHERE @input BETWEEN Start AND End 

要做到這一點,我寫我的查詢爲:

start:[* TO @input] AND end:[@input TO *] 

查詢成功,返回正確的文件,但QTime約爲4500;大多數其他查詢遠低於100.

什麼可以修改以提高性能?

回答

3

我相信你應該嘗試Solr中的查詢解析器Function Range (frange)。有關如何使用函數範圍查詢分析器的更多詳細信息,請參閱介紹性博客文章 - Ranges Over Functions in Solr 1.4。 (注意這應該適用於Solr的所有版本大於1.4爲好)

所以我覺得像下面應該工作...

`?q=*:*&fq={!frange l=0 u=<@input>}start 
    &fq{!frange l=<@input> u=<number larger than greatest value>}end` 

我不知道是否可以使用通配符的上限和下限,可能不是...

+0

謝謝!我試過了frange的昨晚(和filterquery一起),但沒有多少運氣,但是你的查詢運行速度很快(大約200ms,而對於所有其他準確查詢,大約是4500) – STW