Преобразование времени в миллисекундах в формат даты Solr с использованием ScriptUpdateProcessor
Мне нужно преобразовать поле скажем,timestamp_ms(например: 1473794840429), который находится в длинном типе данных, чтобы найти формат даты гггг-мм-ддтчч: мм: сс Z через Solr ScriptUpdateProcessor.
Ниже мой solrconfig.xml
<processor name="script" class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">date-update.js</str>
</processor>
и мой date-update.js это:
function processAdd(cmd) {
doc = cmd.solrDoc; // org.apache.solr.common.SolrInputDocument
var datecheck = doc.getFieldValue("timestamp_ms");
var date1 = new Date(datecheck);
var date2= date1.toUTCString();
doc.setField("tweet_date",date2);
}
-date2 хранится как строковый тип данных.
Когда я перезагружаю ядро и публикую документы, я получаю следующую ошибку:
org.apache.solr.common.SolrException: RunUpdateProcessor получил AddUpdateCommand, содержащий документ, который, по-видимому, все еще содержит операции обновления документа Atomic, скорее всего потому, что DistributedUpdateProcessorFactory был явно отключен из этого updateRequestProcessorChain
Как мне это решить?
2 ответа
Для атомарных обновлений требуется, чтобы был включен Solr Transaction Log, поэтому прежде всего убедитесь, что у вас установлен конфигурационный файл updateLog в solrconfig.xml:
<updateLog>
<str name="dir">${solr.ulog.dir:}</str>
</updateLog>
Убедитесь, что в файле js есть функция с именем finish, например:
function finish(){
}
и убедитесь, что в вашем файле solrconfig.xml после вашего процессора вы добавили следующее, иначе обновление вообще не произойдет:
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
Итак, ваш solrconfig.xml будет выглядеть так:
<updateRequestProcessorChain name="mychain" default="true">
<processor name="script" class="solr.StatelessScriptUpdateProcessorFactory">
<str name="script">last_reaction_date.js</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>