2

我正在寻找一种构建“反向”范围查询的方法,即而不是定义一个字段

<field name="myfield" type="int" ...>

然后在查询中指定一个间隔

myfield:[x TO y]

我宁愿在我的模式中定义一个“间隔字段”

<field name="myfield" type="<whatever_fits_here>" multivalued="true" ...>

例如,该字段的值可能是

[100 TO 250], [460 TO 800], [970 TO 1040]

然后,查询将包含该字段的精确值,因此如果该值包含在其任何间隔中,则记录将匹配。

注意:将区间中的所有可能值收集到一个多值字段中不是一个选项,这在许多情况下会导致每条记录大约 10000 个值(即区间的上限和下限因该数字而异)。

4

2 回答 2

3

本博文中描述的 Poly 字段必须是您要查找的内容。

它包括一个location(Double,Double)类型的模式定义:

<fieldType name=”location” class=”solr.PointType” dimension=”2″ subFieldType=”double”/>
<field name=”store” type=”location” indexed=”true” stored=”true”/>

和一个查询:

q=store:[44,-90 TO 46,-94]

因此,您可以创建一个 range(Int,Int) 字段类型和一个使用它的多值字段。

q=myfield:[75,* TO *,75] //a range that includes 75
q=myfield:[50,* TO *,100] //a range that includes 50-100

免责声明:我自己从未使用过 poly 字段。我不知道这些查询如何在多值字段上工作。

于 2012-04-26T09:29:40.293 回答
0

我会在UpdateProcessor上执行此操作,您可以查看该字段的值,并根据其所属的位置将另一个 field2 设置为“range1”、“range2”等,然后查询 field2。

于 2012-04-25T09:34:17.543 回答