2014-01-17 1 views
1

Я пытаюсь изменить данные ядра Solr непосредственно из каталога «данные» по умолчанию в каталоге экземпляра. Я использую абсолютный путь, потому что мои экземпляры экземпляра Solr core и 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

Я думаю, что это должно быть указано в котом (или эквивалент), как это:

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> 
+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 присутствие тега core в файле solr.xml приведет к ошибке при запуске: http://wiki.apache.org/solr/Solr.xml%204.4% 20and% 20beyond –

1

Вместо жёстко имя ядра в пути, вы можете использовать встроенный в ${solr.core.name} переменной, которая должна автоматически получить набор на имя ядра.

Я использую это для обобщения некоторых путей репликации ведущего/ведомого в экземплярах и ядрах solr, и он работает хорошо.

Я также использую его для индекса advester, который, похоже, не по умолчанию для того же каталога данных, что и основной индекс для ядра (я бы назвал это ошибкой). Таким образом, мы жёстко указательного каталога для этого Suggester с чем-то вроде этого (это необязательное значение для анализатора инфиксного но концепция применяется в любом месте 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 ошибки, которая была зафиксирована уже.

Смежные вопросы