通过单个查询或范围解决多个方面

时间:2019-11-19 19:32:38

标签: solr lucene

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

查询时,我想知道1)结果中包含不同流派ID的列表,以及2)这些结果中的任何一个都处于不同的1个或多个年龄范围(0-4、5- 7等)。

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

我可以将facet.field用作genre_ids,但效果很好,但是我不能确定除了年龄段之外,还有其他功能。

我对Just genre_id facet的查询如下:

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_id,还要告诉我其中有多少本书的年龄在0-4、5-7等。

类似的东西:

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

等等。

是否有一种方法可以从一个solr查询中获取所有这些信息?

1 个答案:

答案 0 :(得分:0)

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

    facet.field=genre_id 

(以获取带有计数的不同genre_id)

    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一个“名字”,但除此之外,这是我的可行解决方案。