Solr 整数范围 Facet

2 投票
3 回答
3418 浏览
提问于 2025-04-15 17:00

我的索引里包含了人们的信息,比如姓名、年龄、电话、电子邮件等等。

我在按年龄进行分组,类似于日期范围的功能。

我的年龄范围是:

    0 to 10
    11 to 20
    21 to 30
    31 to 40 etc etc

当我进行查询时:

    ?q=*:*&facet=true&fq=age:[21+TO+30]

它返回了我想要的21到30岁的所有年龄,但同时也返回了3岁。

    ?q=*:*&facet=true&fq=age:[11+TO+20]

这个查询也是一样,但它返回了2岁。

    ?q=*:*&facet=true&fq=age:[0+TO+10]

这个查询也是一样,但它返回了1岁。有没有人能给我解释一下,这是在solr里发生的什么情况?

3 个回答

1

我对solr一无所知,但我猜它可能把你的范围当成字母顺序来处理,而不是数字。

你可以看看这个回答,里面有一些链接,讨论了一个非常相似的问题。

3

在你的请求中,没有任何分面查询。你使用的是过滤查询,这会让你的结果集变得更小。

也许你可以试着在请求中添加一些分面查询,然后把分面计数区域的结果复制到你上面的提问中。至少这样可以告诉你,Solr认为不同年龄范围内有多少结果:

&facet.query=age:[21+TO+30]&facet.query=age:[11+TO+20]&facet.query=age:[0+TO+10]&facet.query=age:[*+TO+2]&facet.query=age:[*+TO+3]
3

在网上查找资料时,我发现Solr会把所有数据都当作字符串来处理,即使你把它定义为整数。在Solr里,它依然是字符串:

<field name="age" type="integer" indexed="true" stored="true"/>

所以我需要做的是:

<field name="age" type="sint" indexed="true" stored="true"/>

如果你想对整数进行排序,使用这种方式是正确的。我猜“sint”这个类型就是专门为这个目的设计的。

谢谢!

撰写回答