首页 > 解决方案 > Solr 具有单个查询或范围的多个方面

问题描述

我有一个图书数据库。书籍的流派 ID 为整数,年龄范围也为整数 age_min 和 age_max。

当我进行查询时,我想知道 1) 结果中的不同类型 ID 的列表,以及 2) 这些结果中的任何一个都在不同的 1 个或多个年龄范围(0-4、5-7 等)之间.)。

我想要一个genre_ids 列表以及0-4、5-7、7-10 等年龄段的书籍数量。

我可以将 facet.field 用于genre_ids 并且效果很好,但是除了不同的年龄范围之外,我无法弄清楚是否还有它。

我对 JUSTgenre_id 方面的查询如下所示:

http://localhost:8983/solr/core0/select/?wt=json&q=all_genres%3A%22fiction+-+fantasy%22&rows=1&start=0&defType=edismax&facet=true&facet.field=genre_id

所以,不仅要告诉我构成结果的genre_ids,还要告诉我这些书中有多少是0-4岁、5-7岁等。

就像是:

"facet_fields":{
      "genre_id":{
        "38":998,
        "638":915,
      "ages":{
        "0-4":4,
        "5-7":10,

等等。

有没有办法从一个 solr 查询中获取所有这些信息?

标签: solrlucene

解决方案


我有点过度思考我的问题,我只需要使用方面查询。

    facet.field=genre_id 

(用计数获得不同的genre_ids)

    facet.query=age_min:[*+TO+4] 
    facet.query=age_min:[4+TO+7]+AND+age_max:[7+TO+99]
    facet.query=age_min:[7+TO+10]+AND+age_max:[10+TO+99]
    facet.query=age_min:[13+TO+99]+AND+age_max:[13+TO+99]

(获取每个年龄范围的计数)

结果:

  "facet_counts":{
    "facet_queries":{
      "age_min:[* TO 4]":6,
      "age_min:[4 TO 7] AND age_max:[7 TO 99]":16},
      ....
    "facet_fields":{
      "genre_id":[
        "818",740,
        "51",707,
        "1637",373,
       ....

我只希望我能给 facet_queries 一个“名字”,但除此之外,这是我的工作解决方案。


推荐阅读