Primefaces Autocomplete from huge database not acting fast

此生再无相见时 提交于 2019-12-13 11:16:43

问题


I am using primefaces autocomplete component with pojos and which is filled from a database table with huge number of rows. When I select value from database which contains millions of entries (SELECT synonym FROM synonyms WHERE synonym like '%:query%') it takes a very long time to find the word on autocomplete because of huge database entries on my table and it will be bigger in future. Is there any suggestions on making autocomplete acting fast.


回答1:


Limiting the number of rows is a great way to speed-up autocomplete. I'm not clear on why you'd limit to 1000 rows though: you can't show 1000 entries in a dropdown; shouldn't you be limiting to maybe 10 entries?

Based on your comments below, here is an example database query that you should be able to adapt to your situation:

String queryString = "select distinct b.title from Books b where b.title like ':userValue'";
Query query = entityManager.createQuery(queryString);
query.setParameter("userValue", userValue + "%");
query.setMaxResults(20);
List<String> results = query.getResultList();



回答2:


I finally went to using an index solar for doing fast requests while my table will contains more than 4 million entries which must be parsed fastly and without consuming a lot of memory. Here's I my solution maybe someone will have same problem as me.

public List<Synonym> completeSynonym(String query) {

    List<Synonym> filteredSynonyms = new ArrayList<Synonym>();
    // ResultSet result;
    // SolrQuery solrQ=new SolrQuery();
    String sUrl = "http://......solr/synonym_core";

    SolrServer solr = new HttpSolrServer(sUrl);
    ModifiableSolrParams parameters = new ModifiableSolrParams();
    parameters.set("q", "*:*"); // query everything
    parameters.set("fl", "id,synonym");// send back just the id
                                                //and synonym values
    parameters.set("wt", "json");// this in json format
    parameters.set("fq", "synonym:\"" + query+"\"~0"); //my conditions

    QueryResponse response;
    try {

        if (query.length() > 1) {
            response = solr.query(parameters);

            SolrDocumentList dl = response.getResults();
            for (int i = 0; i < dl.size(); i++) {
                Synonym s = new Synonym();
                s.setSynonym_id((int) dl.get(i).getFieldValue("id"));
                s.setSynonymName(dl.get(i).getFieldValue("synonym")
                        .toString());
                filteredSynonyms.add(s);
            }
        }
    } catch (SolrServerException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    return filteredSynonyms;
}


来源:https://stackoverflow.com/questions/29263002/primefaces-autocomplete-from-huge-database-not-acting-fast

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!