对于数字字段,Solr等效于SQL BETWEEN

时间:2011-10-03 22:28:31

标签: performance solr

希望有一些指针可以加速版本3.4.0中的一些(非常)慢的solr查询。

我的索引大约有600万份文件。每个文档都很小,包含两个solr.TrieDoubleField个; "开始"和"结束"。

<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为~4,500;大多数其他查询远低于100。

可以修改哪些内容以提高性能?

1 个答案:

答案 0 :(得分: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`

我不确定你是否可以使用通配符作为上限和下限,可能不是......