2014-01-17 35 views
1

我試圖將我的Solr內核的數據直接從實例目錄下的默認'data'目錄中更改。我使用絕對路徑,因爲我的Solr核心的實例和conf目錄被埋在其他地方(在我的GitHub目錄中)。我認爲這將是在core.properties指定此簡單:Solr:在Windows中更改數據目錄

dataDir=C:\foo\bar\my_new_data_directory 

裏面的「my_new_data_directory」目錄有以下幾種Solr的目錄:

- index 
- tlog 

我使用Windows和我得到啓動Solr時出現以下錯誤:

ERROR - 2014-01-17 12:40:34.578; org.apache.solr.core.CoreContainer; Unable to create core: collection1 
org.apache.solr.common.SolrException 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:680) 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:625) 
    at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:557) 
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:592) 
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:271) 
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:263) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.IOException: The filename, directory name, or volume label syntax is incorrect 
    at java.io.WinNTFileSystem.canonicalize0(Native Method) 
    at java.io.Win32FileSystem.canonicalize(Unknown Source) 
    at java.io.File.getCanonicalPath(Unknown Source) 
    at org.apache.solr.core.StandardDirectoryFactory.normalize(StandardDirectoryFactory.java:47) 
    at org.apache.solr.core.DirectoryFactory.getDataHome(DirectoryFactory.java:246) 
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:677) 
    ... 13 more 

看起來我沒有正確指定文件路徑。它應該如何指定?

回答

1

這還不是最優雅,但我能得到這個正常工作的唯一方法是硬編碼的完整路徑solrconfig.xml中是這樣的:

<dataDir>C:/foo/bar/my_new_data_directory/core1</dataDir> 

UPDATE(2014-02 -14)

我意識到我可以結合幾種方法來獲得所需的結果。

當啓動Solr的,我可以有這個參數:

data.dir=C:/foo/bar/my_new_data_directory/ 

然後solrconfig.xml中,我可以用前綴啓動過程中設置的參數我的數據目錄:

<dataDir>${solr.data.dir:}core1</dataDir> 

這將將數據目錄設置爲:C:/ foo/bar/my_new_data_directory/core1

使用此技術,我可以在不將硬編碼作爲solrcon中完整路徑的情況下支持多個內核fig.xml:

C:/foo/bar/my_new_data_directory/core1 
C:/foo/bar/my_new_data_directory/core2 
1

我認爲這需要在Tomcat中(或同等學歷)到指定是這樣的:

​​

solrconfig.xml中尋找這樣的:

<dataDir>${solr.data.dir:}</dataDir> 

我也注意到有些人做像這樣:

打開solrconfig.xml中

<dataDir>${solr.data.dir}</dataDir> 
by following 
<dataDir>${solr.data.dir:/opt/solr/example/solr/data}</dataDir> 
+0

-Dsolr.data.dir = C:\ foo \ bar \ my_new_data_directory的作品,但它似乎成爲所有核心的數據目錄,如果我有多個核心,我會得到錯誤。有沒有辦法讓Solr查看數據文件夾的子文件夾來查找每個核心的數據?例如:C:\ foo \ bar \ core1和C:\ foo \ bar \ core2 我嘗試使用技術嘗試爲每個核心指定子文件夾,但這不起作用。 –

2

我停止使用core.properties幾個版本前的變量替換而不能正常工作,但我可以在sorl.xml做到這一點:

<core name="core0" instanceDir="core0" dataDir="c:\temp\data" /> 

和索引路徑才能正確回升。

+1

感謝您分享此內容,但請注意,從版本5.0開始,solr.xml中核心標記的存在將在啓動時生成一個錯誤:http://wiki.apache.org/solr/Solr.xml%204.4% 20於是%20beyond –

1

而不是在路徑硬編碼核心的名字,你可以使用內置的${solr.core.name}變量,它會自動被置爲核心的名字。

我使用它來推廣solr實例和核心中的一些主/從複製路徑,並且工作良好。

我也使用它作爲一個建議者索引,它似乎沒有默認爲與核心的主索引相同的數據目錄(我稱之爲bug)。因此,我們硬編碼爲建議者索引目錄像這樣的東西(這是中綴分析儀的可選值,但這個概念的任何地方應用在solrconfig.xml):

<str name="indexPath">C:/indexes/${country}/${solr.core.name}/data/suggest_tag</str> 

${country}值在solrcore.properties創建,例如country=US,所以我們可以通過不同的solr實例概括這個設置。這可能會給你更多的想法,可以做些什麼。

0

我相信solrcore.properties/core.properties正確的語法是:

solr.data.dir=/path/foo/here 

或:

solr.data.dir=C:\\foo\\bar\\data 

其中在Windows上,我認爲你應該使用雙反斜線如上。

如果這是行不通的,錯誤:

java.io.IOException: The filename, directory name, or volume label syntax is incorrect

可能潛在地與SOLR-4810錯誤,這已經固定。