我正在使用带有pojos的primefaces自动完成组件,它从具有大量行的数据库表中填充。
当我从包含数百万条目(SELECT synonym FROM synonyms WHERE synonym like '%:query%'
)的数据库中选择值时,由于我桌面上存在大量数据库条目而需要很长时间才能在自动完成上找到该单词,并且将来会更大。
有没有关于快速完成自动完成的建议。
答案 0 :(得分:0)
限制行数是加速自动完成的好方法。我不清楚为什么你限制为1000行:你不能在下拉列表中显示1000个条目;你不应该限制10个条目吗?
根据您在下面的评论,这是一个示例数据库查询,您应该能够适应您的情况:
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();
答案 1 :(得分:0)
我终于使用索引solar来执行快速请求,而我的表将包含超过400万个条目,必须快速解析并且不会占用大量内存。 这是我的解决方案,也许有人会遇到与我相同的问题。
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;
}