我试图改变我的Solr核心的数据直接从实例目录下的默认“数据”目录。 我使用绝对path,因为我的Solr核心的实例和conf目录被埋在其他地方(在我的GitHub目录中)。 我认为这将是core.properties中指定这个容易:
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
它看起来像我没有正确指定文件path。 它应该如何指定?
由于变量替换工作不正常,我停止使用core.properties几个版本,但是我可以在sorl.xml中执行此操作:
<core name="core0" instanceDir="core0" dataDir="c:\temp\data" />
索引路径得到适当的拾取。
我认为这需要在这样的tomcat(或同等)指定:
export JAVA_OPTS="$JAVA_OPTS -Dsolr.data.dir=C:\foo\bar\my_new_data_directory"
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>
这不是最优雅的,但是我可以正确地工作的唯一方法是将完整路径硬编码到solrconfig.xml中,如下所示:
<dataDir>C:/foo/bar/my_new_data_directory/core1</dataDir>
更新(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
使用这种技术,我可以在不使用硬编码的情况下在solrconfig.xml中支持多个内核:
C:/foo/bar/my_new_data_directory/core1 C:/foo/bar/my_new_data_directory/core2
核心名称不是在路径中硬编码,您可以使用内置的${solr.core.name}
变量,该变量应该自动设置为核心名称。
我使用它来推广Solr实例和核心中的一些主/从复制路径,并且工作良好。
我也用它作为一个建议索引,似乎没有默认为相同的数据目录作为核心的主要索引(我会说这个错误)。 所以我们用这样的东西来硬编码该提示器的索引目录(这是中缀分析器的可选值,但是这个概念适用于solrconfig.xml
任何地方):
<str name="indexPath">C:/indexes/${country}/${solr.core.name}/data/suggest_tag</str>
${country}
值是在solrcore.properties
创建的,例如country=US
,所以我们可以在不同的solr实例之间概括这个设置。 这可能会给你更多的想法,可以做些什么。
我相信solrcore.properties
/ core.properties
的正确语法是:
solr.data.dir=/path/foo/here
要么:
solr.data.dir=C:\\foo\\bar\\data
在Windows上我认为你应该使用上面的双反斜杠。
如果这不起作用,错误:
java.io.IOException:文件名,目录名称或卷标语法不正确
可能与已经修复的SOLR-4810错误有关。