2013-06-10 2 views
0

Я использую Solr для поиска моего содержимого данных веб-страницы. Мой solr-indexer создаст несколько полей и соответствующие значения. Однако некоторые из этих полей я хочу обновлять чаще, например, количество кликов на этой странице. Эти поля не обязательно должны быть индексируемыми, и мне не нужно выполнять поиск по этим значениям полей. Однако я хочу их получить и часто обновлять. Я новичок в solr, поэтому более описательный ответ, возможно, с некоторым примером/кодом поможет мне лучше.Обновляемые поля In Solr

ответ

0

Для получения дополнительной информации об обновлении проверьте Wiki. И отметьте this link для атомного обновления. Он работает только в Solr 4 и выше.

+0

эй спасибо, вы можете предоставить solrJ стороне клиента код Java для этого? – Apurv

2

Если вы находитесь на Solr 4+, да, вы можете нажать Partial Update на индекс Solr.

Для частичного обновления все поля в вашем schema.xml необходимо сохранить.

Это как ваши поля раздел должен выглядеть следующим образом:

<fields> 
    <field name="id" type="string" indexed="true" stored="true" required="true" /> 
    <field name="title" type="text_general" indexed="true" stored="true"/> 
    <field name="description" type="text_general" indexed="true" stored="true" /> 
    <field name="body" type="text_general" indexed="true" stored="true"/> 
    <field name="clicks" type="integer" indexed="true" stored="true" /> 
</fields> 

Теперь, когда вы отправляете частичное обновление для одной из областей, например: в вашем случае «кликов»; в фоновом режиме Solr пойдет и выберет значения для всех других полей для этого документа, такие как заголовок, описание, тело, удалить старый документ и выведет новый обновленный документ в индекс Solr.

localhost:8080/solr/update?commit=true' -H 'Content-type:application/json' -d '[{"id":"1","clicks":{"set":100}}] 

Вот хорошая документация на частичное обновление: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/

+0

эй спасибо, можете ли вы предоставить Java-код для solrJ для этого? – Apurv

+0

Привет, Apurv, я нашел это обсуждение, которое могло бы вам помочь. http://stackoverflow.com/questions/12183798/solrj-api-for-partial-document-update Я не парень JAVA, я использую Solr с PHP. –

0

Пример SOLR- частичный код обновления:

Предпосылки: Поля должны быть сохранены.

Вам необходимо настроить путь обновления журнала под непосредственным обработчиком обновлений

<updateHandler class="solr.DirectUpdateHandler2"> 

    <!-- Enables a transaction log, used for real-time get, durability, and 
     and solr cloud replica recovery. The log can grow as big as 
     uncommitted changes to the index, so use of a hard autoCommit 
     is recommended (see below). 
     "dir" - the target directory for transaction logs, defaults to the 
       solr data directory. --> 
    <updateLog> 
     <str name="dir">${solr.ulog.dir:}</str> 
    </updateLog> 
    </updateHandler> 

Код:

import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 
import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer; 
import org.apache.solr.client.solrj.impl.HttpSolrServer; 
import org.apache.solr.common.SolrInputDocument; 
public class PartialUpdate { 
    public static void main(String args[]) throws SolrServerException, 
      IOException { 
     SolrServer server = new HttpSolrServer("http://localhost:8080/solr"); 
     SolrInputDocument doc = new SolrInputDocument(); 
     Map<String, String> partialUpdate = new HashMap<String, String>(); 
     // set - to set a field. 
     // add - to add to a multi-valued field. 
     // inc - to increment a field. 
     partialUpdate.put("set", "peter"); // value that need to be set 
     doc.addField("id", "122344545"); // unique id 
     doc.addField("fname", partialUpdate); // value of field fname corresponding to id 122344545 will be set to 'peter' 
     server.add(doc); 
    } 
} 
Смежные вопросы