2011-09-09 131 views
0

我有我從我的網址採取了以下查詢查詢Solr中

public static String query="pen&mq=pen&f=owners%5B%22abc%22%5D&f=application_type%5B%22cde%22%5D"; 

我想用這個查詢

CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8080/solr/");   
server.setParser(new XMLResponseParser());   
SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery(query); 
QueryResponse qr =server.query(solrQuery); 
SolrDocumentList sdl = qr.getResults(); 

System.out.println("Found: " + sdl.getNumFound()); 

我檢查我的查詢中的tomcat日誌文件來查詢Solr的,它是翻譯爲

path=/select params={version=2&wt=javabin&q=pen%26mq%3Dpen%26f%3Downers%255B%2522abc%2522%255D%26f%3Dapplication_type%255B%2522cde%2522%255D` 

它給了我0結果,儘管有500個文檔。 我試圖用

URLDecoder.decode(query,"UTF-8"); 

我的查詢進行解碼,但隨後開始抱怨「[」的跡象。

org.apache.lucene.queryParser.ParseException: Encountered " "]" "] 

我該如何查詢使用此查詢的solr服務器? 是否有必要以解析該查詢並取每個濾波器的值,然後使用

solrQuery.setFilterQueries() 

方法。有人可以幫我這麼做

回答

3

如果你將手動調用中的url與Solr進行比較,以及根據tomcat日誌將參數作爲參數傳遞給Solrj的solr調用,它們不匹配。

看起來您正在將編碼的url參數傳遞給您的電話:solrQuery.setQuery(query),然後Solrj將編碼應用於那些已編碼的參數。你可以看到這個地方pen&mq=pen正在基礎上Solrj Wiki Page我建議將所有使用query.setParam選項查詢參數的轉向itnto q=pen%26mq%3Dpen

。所以,你需要做到以下幾點:

SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery("pen"); 
solrQuery.setParam("mq","pen"); 
solrQuery.setParam("f","owners[\"abc\"]"); 
solrQuery.setParam("f","application_type[\"cde"\]"); 
QueryResponse qr = server.query(solrQuery); 
SolrDocumentList sdl = qr.getResults(); 

System.out.println("Found: " + sdl.getNumFound()); 

更新:增加完全轉化爲setParams。

+0

因此,我需要解析從url中獲取的查詢字符串 – sparkle

+1

在使用SolrJ的情況下,是的。您不能直接從Solr管理頁面(我假設)構建的直接URL將其粘貼到SolrJ中作爲查詢。您需要使用SolrJ方法構建相同的參數。我會回答你的問題中的所有參數。 –