【问题标题】:How to cache Lucene search result?如何缓存 Lucene 搜索结果?
【发布时间】:2015-08-10 10:01:16
【问题描述】:

我正在寻找如何在 Lucene 中缓存搜索结果的解决方案。 当我使用 Solr 时,分页要容易得多

我的 solr 代码:

query.setStart(start);
query.setRows(rows);
QueryResponse 响应 = solr.query(query);

简单的通配符搜索对于第 100 个结果大约需要 400 毫秒,而每个下一页大约需要 20-70 毫秒

但是当我每次使用 Lucene 时,我必须再次搜索,并且每个页面需要 400 毫秒

我的 Lucene 代码:

查询查询 = queryParser.parse(text);

TopScoreDocCollector 收集器=TopScoreDocCollector.create(1000000);
IndexSearcher = indexSearcher.search(查询,收集器);

TopDocs 结果 =collector.topDocs(start,rows);
for (ScoreDoc scoreDoc : results.scoreDocs) {
文档文档 = indexSearcher.doc(scoreDoc.doc);

我尝试将 TopScoreDocCollector 和 IndexSearcher 设为静态,但这不起作用

您还有其他解决方案吗?

【问题讨论】:

    标签: search solr lucene


    【解决方案1】:

    我将结果设为静态

    静态 TopDocs 结果;

    结果 = indexSearcher.search(query, 100000);

    public ArrayList meakeResult() 抛出 IOException{ ArrayList res = new ArrayList();

    ScoreDoc[] hits=results.scoreDocs;

       for (int i=start; i < start+rows; i++) {
           Document document = indexSearcher.doc(hits[i].doc);
           Answer tab = new Answer();
           tab.setAnswer(document.get("answer"));
           tab.setQuestion("question" + document.get("question"));
           tab.setProces("proces" + document.get("proces"));
           tab.setForm("form: " + document.get("form")); 
           res.add(tab);
       }
    

    【讨论】:

    • 此解决方案在多线程(Web 应用程序上下文)环境中存在缺陷。应该有另一种方法来实现这一点:静态不是您问题的真正“修复”。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多