How to get all results from solr query?

后端 未结 8 879
温柔的废话
温柔的废话 2021-01-01 10:36

I executed some query like \"Address:Jack*\". It show numFound = 5214 and display 100 documents in results page(I changed default display results f

8条回答
  •  庸人自扰
    2021-01-01 11:23

    I suggest to use Deep Paging.

    Simple Pagination is a easy thing when you have few documents to read and all you have to do is play with start and rows parameters. But this is not a feasible way when you have many documents, I mean hundreds of thousands or even millions.
    This is the kind of thing that could bring your Solr server to their knees.

    For typical applications displaying search results to a human user, this tends to not be much of an issue since most users don’t care about drilling down past the first handful of pages of search results — but for automated systems that want to crunch data about all of the documents matching a query, it can be seriously prohibitive.

    This means that if you have a website and are paging search results, a real user do not go so further but consider on the other hand what can happen if a spider or a scraper try to read all the website pages.

    Now we are talking of Deep Paging.

    I’ll suggest to read this amazing post:

    https://lucidworks.com/blog/2013/12/12/coming-soon-to-solr-efficient-cursor-based-iteration-of-large-result-sets/

    And take a look at this document page:

    https://cwiki.apache.org/confluence/display/solr/Pagination+of+Results

    And here is an example that try to explain how to paginate using the cursors.

    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setRows(500);
    solrQuery.setQuery("*:*");
    solrQuery.addSort("id", ORDER.asc);  // Pay attention to this line
    String cursorMark = CursorMarkParams.CURSOR_MARK_START;
    boolean done = false;
    while (!done) {
        solrQuery.set(CursorMarkParams.CURSOR_MARK_PARAM, cursorMark);
        QueryResponse rsp = solrClient.query(solrQuery);
        String nextCursorMark = rsp.getNextCursorMark();
        for (SolrDocument d : rsp.getResults()) {
                ... 
        }
        if (cursorMark.equals(nextCursorMark)) {
            done = true;
        }
        cursorMark = nextCursorMark;
    }
    

提交回复
热议问题