Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

elasticsearch number of facets returned

I have faceted queries working with elasticsearch 0.19.9. However I would like to return all facets that have a count > 0.

According to the documentation I should be able to:

{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "tag",
                "all_terms" : true
            }
        }
    }

}

As I understand, this should give me all facets even if count is 0.

However, this is still only returning the top 10 facets by count. Which is the default size. The only thing that seems to affect the number of returned facets is by actually setting "size" : N where N is the number of facets which will be returned.

I could set this to a really high number but that just seems to hack-ish.

Any ideas as to what I may be doing wrong?

like image 555
Michael Avatar asked Sep 05 '12 15:09

Michael


2 Answers

You're not doing anything wrong. You figured it out correctly! There is an open issue on github to make the terms facet similar to the Terms Stats facet which allows you to set size=0 in order to get all the terms back. For now you just need to use an high value, which is a bit tricky, I agree. On the other hand be careful not to return too many entries!

like image 71
javanna Avatar answered Sep 22 '22 08:09

javanna


{
    "query" : {
        "match_all" : {  }
    },
    "facets" : {
        "tag" : {
            "terms" : {
                "field" : "tag",
                "size" : 2147483647,
                "all_terms" : false
            }
        }
    }
}

The only way to remove the "count: 0" is to put "all_terms" as false, and set your size number as high and as impossible as you can in your Elasticsearch instance (the example above is the largest signed value that an integer in PHP can have).

It may not be the best way, but this is the only known approach so far. Facet filter doesn't work with this at present (unless they updated and improved Elasticsearch to do it).

like image 29
Jonathan Moo Avatar answered Sep 23 '22 08:09

Jonathan Moo