Solr'da şemada saklanmış = "true" ile bir alanımız varsa ve bu alanla ilişkili analizörü değiştirirsek, tüm alanları yeniden taramaksızın bu alanı güncellemek mümkün müdür? Bu, orijinal veri kaynağına geri dönmeden yeni analizör ile alanın "kayıtlı" değerlerini kullanarak yapılabilir mi?Orijinal kaynağından yeniden dizine girmeden Solr'daki şemada belirtilen analizörün değiştirilmesi mümkün mü?
5
A
cevap
0
SolrJ'yi kullanarak bir yol buldum. Biz "yeni" inputdoc (eski resultDoc bir kopyası) eklediğinizde
SolrQuery query = new SolrQuery();
query.setQuery("whatever_by_id");
QueryResponse rsp;
rsp = server.query(query);
Iterator<SolrDocument> iter = rsp.getResults().iterator();
while (iter.hasNext()) {
SolrDocument resultDoc = iter.next();
String id = (String) resultDoc.getFieldValue("oid"); //id is the uniqueKey field
SolrInputDocument inputdoc = new SolrInputDocument() ;
for(Map.Entry<String, Object> f : resultDoc.entrySet()) {
inputdoc.setField(f.getKey(), f.getValue()) ;
}
server.deleteById(id) ;
server.commit() ;
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(inputdoc) ;
server.add(docs) ;
server.commit() ;
}
, biz dizine şemada değişti yeni analizörü kullanır. Çok zarif değil, ama işe yarıyor.
+0
Ancak bu yeniden indeksleniyor ... –
+0
Evet xD, ancak tüm belgeler. İlk tam ithalat 8 saat sürdü ve xD'yi tekrarlamak istemiyorum. – Juampa
1
Adam, ben kodunuzu optimize ettim.
...
while (iter.hasNext()) {
...
//server.deleteById(id) ;
//server.commit() ;
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(inputdoc) ;
server.add(docs) ;
// server.commit() ;
}
server.commit() ;
0
onay üzerinden bu IBM Tutorial for Solr
Bu [Bu] benzer görünmektedir (http://stackoverflow.com/questions/9105542/customizing-analyzers-in-solr/9107815#comment11455477_9107815). – RoiG