Vraag Werk een nieuw veld bij naar een bestaand document


is er mogelijkheid om een ​​nieuw veld bij te werken naar een bestaand document? Bijvoorbeeld: Er is een document met verschillende velden, b.v.

ID=99999
Field1:text
Field2:text

Dit document staat al in de index, ik wil nu een nieuw veld invoegen in dit document ZONDER de oude gegevens:

ID=99999
Field3:text

Voor nu wordt het oude document verwijderd en wordt een nieuw document met de ID gemaakt. Dus als ik nu naar de ID 99999 zoek, zal het resultaat zijn:

ID=99999
Field3:text

Ik heb dit gelezen op de Solr Wiki

Hoe kan ik een specifiek veld van een bestaand document bijwerken?

Ik wil een specifiek veld bijwerken in een document, kan dat? Ik hoef slechts één veld te indexeren voor> een specifiek document. Moet ik hier al het document voor indexeren?

Nee, alleen het ene document. Stel dat u een CMS heeft en u één document bewerkt. U moet dit document alleen opnieuw indexeren met behulp van de instructie add solr voor het hele document (niet één veld).

In Lucene om een ​​document bij te werken is de bewerking echt een delete gevolgd door een add. U hebt> nodig om het volledige document toe te voegen, omdat er in Lucene geen dergelijke "update only a field" -semantiek is.

Dus is hier een oplossing voor? Zal deze functie in een andere versie worden geïmplementeerd (ik gebruik momenteel 3.6.0). Als een tijdelijke oplossing, dacht ik aan het schrijven van een script of een toepassing, die de bestaande velden verzamelt, het nieuwe veld toevoegt en het hele document bijwerkt. Maar ik denk dat dit de prestaties zal schaden. Heb je nog andere ideeën?

Beste wensen


10
2017-08-03 08:10


oorsprong


antwoorden:


Ik heb 2 antwoorden voor u (beide min of meer slecht):

  1. Om te kunnen bijwerken in het document in Solr, moet u het hele document opnieuw indexeren (om Field3 binnen document-ID: 99999 bij te werken, moet u dat document opnieuw indexeren met waarden voor alle velden)
  2. In Solr 4 hebben ze zo'n functie geïmplementeerd, maar ze hebben een voorwaarde: alle velden moeten worden opgeslagen, niet alleen geïndexeerd. Wat er gebeurt, is dat ze opgeslagen waarden gebruiken en het document opnieuw indexeren op de achtergrond. Als je geïnteresseerd bent, is er een leuk artikel over: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ Deze oplossing heeft een duidelijke tekortkoming en dat is de grootte van de index wanneer u alle velden opslaat.

Ik hoop dat dit je zal helpen met je probleem. Als u nog vragen heeft, kunt u dit stellen


10
2017-08-03 09:13



Het is mogelijk om dit in Solr 4 te doen. Bijvoorbeeld. Beschouw het volgende document

{
 "id": "book123",
 "name" : "Solr Rocks"
}

Als u een auteurveld aan het document wilt toevoegen, is de veldwaarde een json-object met het kenmerk "set" en de veldwaarde

$ curl http://localhost:8983/solr/update -H 'Content-type:application/json' -d '
[
 {"id"       : "book123",
  "author"   : {"set":"The Community"}
 }
]'

Jouw nieuwe document

$ curl http://localhost:8983/solr/get?id=book123

zal zijn

{
 "doc" : {
    "id"    : "book123",
    "name"  : "Solr Rocks"
    "author": "The Community"
 }
}

Set zal het auteurveld toevoegen of vervangen. Naast set heb je ook de mogelijkheid om te verhogen (inc) en toe te voegen (add)


6
2017-07-10 20:16



Vanaf Solr 4 kunt u een veld bijwerken in solr .... u hoeft de indexen niet opnieuw te indexeren .... verschillende modifiers worden ondersteund, zoals ....

set - een bepaalde waarde instellen of vervangen, of de waarde verwijderen als null wordt opgegeven als de nieuwe waarde toevoegen - voegt een extra waarde toe aan een lijst verwijderen - verwijdert een waarde (of een lijst met waarden) uit een lijst removeregex - verwijdert uit een lijst die overeenkomt met de gegeven Java-reguliere expressie inc - verhoogt een numerieke waarde met een bepaald bedrag (gebruik een negatieve waarde om te verlagen)

voorbeeld:

document

{
 "id": "1",
 "name" : "Solr"
 "views" : "2"
}

update nu met

$ curl http://localhost:8983/solr/demo/update -d '
[
 {"id"         : "1",
  "author"   : {"set":"Neal Stephenson"},
  "views"   : {"inc":3},
  }
]' 

zal resulteren in

{
 "id": "1",
 "name" : "Solr"
 "views" : "5"
 "author" : "Neal Stephenson"
}

0
2018-01-11 08:59