Inserire una variabile in una query lucene

cancel
Showing results for 
Search instead for 
Did you mean: 
bishop_8870
Member II

Inserire una variabile in una query lucene

Ciao a tutti,

Sto cercando di scrivere una action che sposta un documento da un folder xx in un folder OBSOLETI.

Per fare ciò estraggo il nome del file che viene inserito nel folder e mi ricavo il nome del folder che inserisco nella variabile "dirName" poi eseguo questa query per ottenere il noderef del folder OBSOLETI che è legata al folder dirName:

String query_folder=("PATH:\"//app:company_home//st:sites//cm:test_site//cm:documentLibrary//cmSmiley Very Happyocumenti//cm:${dirName}//cmSmiley SurprisedBSOLETI\"AND TYPE:\"cm:folder\"");

spFolderQt.setQuery(query_folder);

rs = this.searchService.query(spFolderQt);

Quando eseguo questa query ricevo un errore lucene.queryParser sul $ di ${dirName} e se lo tolgo l'errore è su {dirName}.

Quale sintassi si usa per inserire una variabile in questa query?

Grazie.

2 Replies
openpj
Moderator
Moderator

Re: Inserire una variabile in una query lucene

Se esegui una query con il token PATH di Lucene devi ricordarti che i singoli termini del percorso devono essere costruiti considerando che non sono relativi al valore della proprietà cm:name ma del valore del child name del nodo del contenuto.

Questo perché Alfresco, come anche altri repository, utilizza lo standard XPath per alberare i nodi del grafo come da standard XML.

Questo significa che il valore di dirName deve essere codificato in ISO9075.

Se usi la Java API dovrai costruire la query in questo modo:

String dirNameISO9075 = ISO9075.encode(dirName);
String query_folder=("PATH:\"//app:company_home//st:sites//cm:test_site//cm:documentLibrary//cm:Documenti//cm:"+dirNameISO9075+"//cm:OBSOLETI\"AND TYPE:\"cm:folder\"");
‍‍

In realtà la stessa cosa andrebbe fatta anche per OBSOLETI se avesse avuto caratteri speciali inclusi nel valore come ad esempio lo spazio.

Nel caso non fosse posizionale, potresti eseguire la seguente query Lucene senza fare l'encoding del valore:

String query_folder="TYPE:\"cm:folder\" AND @cm\\:name:\""+dirName+"\"";

Spero ti aiuti a risolvere Smiley Happy

bishop_8870
Member II

Re: Inserire una variabile in una query lucene

Grazie, non ci sarei mai rrivato, di tutti i manuali che ho consultato non ho trovato indicazioni in merito, grazie