2015-03-31 88 views
1

我想要做一個示例程序來使用solrj進行搜索。 我的代碼低於 基本上我試圖搜索一個單詞,其中包含book_name字段中的每個地方。 當搜索多個單詞我得到異常未定義的字段文本Solrj

HttpSolrClient solr=new HttpSolrClient("http://localhost:8983/solr/Books"); 
      System.out.println("here we go"); 
      SolrQuery query = new SolrQuery(); 
      query.setQuery("book_name:indian poems"); 
      QueryResponse response=solr.query(query); 
      System.out.println(response.toString()); 

但其顯示的異常

Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr/Books: undefined field text. 

但是如果我搜索它的一個字其做工精細

回答

0

大概text是您的默認搜索字段。

...這取決於你的搜索處理器配置:這意味着你的情況可能是:如果你的搜索查詢是book_name:indian poems,在默認搜索字段在現場book_nameindian和搜索poems Solr的搜索 - 視您的solr.xml配置。

所以,如果你想搜索在該領域的兩個詞,下面應該工作:

query.setQuery("book_name:indian book_name:poems"); 

的另一種選擇是,設置默認搜索欄來book_name,例如由量變到質變的solr.xml或爲每個查詢定義qf參數。

我不熟悉solrj,但這樣的事情可以工作:

query.set("qf", "book_name"); 
+0

query.setQuery( 「BOOK_NAME:印度BOOK_NAME:詩」); 它不會給我書名,其中包含book_name字段中的兩個單詞,它給我的結果是整個給定單詞 – Juhan 2015-03-31 08:33:18

+0

中的任何單詞,這取決於您的搜索處理程序配置和您的默認操作員,哪個seamst是'或'。你可以用這個命令來控制這個AND AND或者改變你的查詢: 'query.setQuery(「book_name:indian book_name:poems」);' 或者如果你想搜索一個短語:'query.setQuery('book_name :「indian poems」');' – 2015-03-31 09:39:26

+1

你也可以使用括號將幾個單詞指向一個字段,如'query.setQuery(「book_name:(indian poems)」);'。這比短語不那麼嚴格。 – cheffe 2015-03-31 11:50:56