2012-04-14 76 views
0

我需要測試某些文檔是否匹配查詢之前實際索引它們。你會如何做到這一點?我正在考慮的一種可能性是在內存(ramdisk?)上運行一個普通的lucene索引,然後在發送給實際的Solr服務器之前,對每個新文檔執行索引 - >測試查詢 - >刪除循環。solr/lucene測試查詢agains文檔沒有索引

任何人都可以想到這個問題的更好的解決方案嗎?

非常感謝。

更新:

看起來這可能是一個很好的起點:http://www.lucenetutorial.com/lucene-in-5-minutes.html

回答

2

由於Solr的允許交易/提交你其實可以對其進行索引和之前你提交你說出一個刪除查詢其刪除所有不匹配的文件。

/** 
* @author Omnaest 
*/ 
public class SolrSimpleIndexingTest 
{ 
    protected SolrServer solrServer = newSolrServerInstance(); 

    @Test 
    public void testSolr() throws IOException, 
         SolrServerException 
    { 

    { 
     SolrInputDocument solrInputDocument = new SolrInputDocument(); 
     { 
     solrInputDocument.addField("id", "0"); 
     solrInputDocument.addField("text", "test1"); 
     } 
     this.solrServer.add(solrInputDocument); 
    } 
    { 
     SolrInputDocument solrInputDocument = new SolrInputDocument(); 
     { 
     solrInputDocument.addField("id", "1"); 
     solrInputDocument.addField("text", "test2"); 
     } 
     this.solrServer.add(solrInputDocument); 
    } 
    this.solrServer.deleteByQuery("text:([* TO *] -test2)"); 
    this.solrServer.commit(); 

    /* 
    * Now your index does only contain the document with id=1 !! 
    */ 

    QueryResponse queryResponse = this.solrServer.query(new SolrQuery().setQuery("*:*")); 
    SolrDocumentList solrDocumentList = queryResponse.getResults(); 

    assertEquals(1, solrDocumentList.size()); 
    assertEquals("1", solrDocumentList.get(0).getFieldValue("id")); 
    } 

    /** 
    * @return 
    */ 
    private static CommonsHttpSolrServer newSolrServerInstance() 
    { 
    try 
    { 
     return new CommonsHttpSolrServer("http://localhost:8983/solr"); 
    } 
    catch (MalformedURLException e) 
    { 
     e.printStackTrace(); 
     fail(); 
    } 
    return null; 
    } 
}