2017-03-27 113 views
0

我是Solr的初學者,現在我已經實現了在本地機器上運行它並索引一些文檔。接下來我需要做的是通過外部Java應用程序或Android應用程序進行查詢。從另一臺機器使用solr服務器

我讀了SolrJ,可以在我的客戶端應用程序中使用,但我不確定如何在服務器端配置Solr。

我還了解到,自從Solr 5.x(我目前使用6.3)Web Tomcat不再使用Tomcat之後,我如何獲得一個地址而不是我的「localhost:port」來在SolrJ中使用呼叫?

回答

1

首先,你已經得到了,Solr is no more一個web應用程序,但你應該把它看作一個服務器,就像任何其他NoSql服務器一樣。

Solr的有它的默認值,它通常具有HTTP端口監聽8983.

我現在會建議更多地關注Solr的工作方式(收集,過濾和令牌鏈,查詢分析器等),以及如何信息檢索一般工作。 Solr的人很容易做到這一點,所以你只需要知道配置你的服務器連接就需要知道服務器的IP地址和端口是什麼。

鑑於您打算將Solr與Android應用程序結合使用,HTTP協議是最簡單的方法。

因此8983是默認端口,用於服務器管理(http://localhost:8983/solr)和連接HTTP客戶端。

SolrJ客戶端基本上使用HTTP協議來提交請求。例如,當Solr配置爲雲模式時,也有例外,但它適用於大公司和企業配置。

此處舉例說明如何爲集合my-collection創建SolrJ 6.3客戶端SolrClient

String urlString = "http://localhost:8983/solr/my-collection"; 
SolrClient solrClient = new HttpSolrClient.Builder(urlString).build(); 

例如讓我們比較簡單的Solr查詢:

http://localhost:8983/solr/my-collection/select?q=*:*&rows=10 
在SolrJ相當於

SolrQuery solrQuery = new SolrQuery(); 
solrQuery.setQuery("*:*"); // means no filters, get everything 
solrQuery.setRows(10); // but I want only the first 10 rows 

所以,SolrQuery類是寫的大多數查詢的界面,你可以想到。

還有如何提交:

QueryResponse response = solrClient.query(solrQuery); // submit your query 

現在查詢已提交和響應通常會立即返回,以及它隨那種你正在執行的查詢,但是,我不得不說,通常Solr的速度非常快。

代碼的其餘部分打印您的集合中的文檔數量 並通過它們進行交互。

System.out.println(response.getResults().getNumFound()); 
for(SolrDocument d : response.getResults()) { 
    System.out.println(d.get("field_name").toString()); 
} 

看看這裏Solr和SolrJ文檔寫得很好,並且有很多例子。

+0

謝謝你的回答,但你最後沒有鏈接任何東西,你的意思是鏈接的東西說「看看這裏」?無論如何,我已經看到了這些SolrJ的例子,但我仍然不能在另一臺機器上使用本地主機,因爲我的android應用程序將運行手機。所以我想我的問題留在你的例子中提到的這個urlString。使它成爲一個獨立的應用程序非常好,但如果我不能使用WAR並且我沒有靜態公共IP,我該如何設法輕鬆地連接我的Solr服務器? –

+0

所以你的問題是你無法獲得你的Solr實例的IP地址。這不是一個Solr問題,是一個網絡問題。 AWS在哪裏部署了您的實例? – freedev

+0

我沒有在任何地方部署它。我在我的機器上安裝了Solr並編制了一些文檔索引,現在我想從不在同一臺計算機上運行的應用程序查詢此核心。因爲Solr 6沒有像容器那樣的東西,我應該如何進行? –

相關問題