Преобразование времени в миллисекундах в формат даты Solr с помощью ScriptUpdateProcessor

Мне нужно преобразовать поле, скажем, timestamp_ms (например: 1473794840429), которое имеет длинный тип данных, в формат даты solr yyyy-mm-ddThh:mm:ssZ через 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.

Как мне это решить?


person Anurag.D    schedule 17.09.2016    source источник
comment
Можете ли вы добавить конфигурацию, которую вы сделали для updateRequestProcessorChain, в файл solrconfig?   -  person Sanjay Dutt    schedule 17.09.2016
comment
Вы используете Solr в режиме SolrCloud?   -  person EricLavault    schedule 18.09.2016


Ответы (2)


атомарные обновления требуют Solr Журнал транзакций должен быть включен, поэтому в первую очередь необходимо убедитесь, что у вас есть конфигурация updateLog в solrconfig.xml :

<updateLog>
  <str name="dir">${solr.ulog.dir:}</str>
</updateLog>
person EricLavault    schedule 18.09.2016

Убедитесь, что в файле 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>
person Amirabbas Askary    schedule 05.09.2017