Ricerca lucene caratteri speciali

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

Ricerca lucene caratteri speciali

Salve a tutti,
ho riscontrato 3 problemi in fase di ricerca documenti con lucene:
1) Se campo custom di un nuovo modello ha come valore una stringa di 2 caratteri, lucene non riesce a trovare il documento.
2) Se campo custom di un nuovo modello ha come valore una stringa del tipo 29/03/2011 (deve essere stringa e non data), lucene non riesce a trovare il documento.
3) Se campo custom di un nuovo modello ha come valore una stringa di tipo guid (bb5b0116-a449-4340-884d-5cd7de5c2214) , lucene non riesce a trovare il documento.

E' capitato anche a qualcun altro?
Come risolvere?
Grazie
danilo
8 Replies
openpj
Moderator
Moderator

Re: Ricerca lucene caratteri speciali

Da quello che so la limitazione per almeno 3 caratteri c'è ma solo sulla ricerca FullText perché è proprio una limitazione della tokenizzazione di Lucene e non dipende da Alfresco.

Per gli altri due punti potrebbe essere un problema di dichiarazione del model e di come è stato dichiarato l'elemento di configurazione degli indici per le singole property.

Potresti condividere la configurazione del tuo modello per queste properties su cui riscontri un problema?
batdan
Member II

Re: Ricerca lucene caratteri speciali

Per quanti riguarda il punto 2, l'elemento è stato dichiarato in questo modo:
<property name="pri-edoc:data_protocollo">
          <type>d:text</type>
</property>

Per quanti riguarda il punto 3, l'elemento è stato dichiarato in questo modo:
        <property name="pri-edoc:id_mittente">
          <type>d:text</type>
        </property>

ho provato anche a dichiarare una lista in questo modo:
  <property name="pri-edoc:id_mittenti">
          <type>d:text</type>
          <multiple>true</multiple>
          <index enabled="true">
            <atomic>true</atomic>
            <stored>true</stored>
            <tokenised>true</tokenised>
          </index>
        </property>

ma la ricerca non funziona neanche così.

Grazie per la disponibilità
openpj
Moderator
Moderator

Re: Ricerca lucene caratteri speciali

Se vuoi ricercare con il valore esatto tramite queste properties devi settare l'elemento tokenised a false e non a true.

In questo modo puoi ricercare i nodi che hanno queste properties tramite il valore esatto. Altrimenti se abiliti la tokenizzazione vuol dire che Lucene ti permette di cercare questo nodo tramite questa property ma solo indicando un token del valore.

Dopo aver modificato i parametri di indicizzazione, ricordati che per poter fare delle prove certe sulle ricerche devi rigenerare gli indici di Lucene, altrimenti i risultati delle ricerche non verranno mai corretti.

Spero ti sia utile.
batdan
Member II

Re: Ricerca lucene caratteri speciali

Ma l'elemento tokenised non è false di default?
Come faccio a rigenerare gli indici di lucene?
grazie
openpj
Moderator
Moderator

Re: Ricerca lucene caratteri speciali

No, il valore di default dell'elemento tokenised è true come puoi vedere dal wiki in questa pagina:
http://wiki.alfresco.com/wiki/Data_Dictionary_Guide#Additional_Property_Capabilities

Per rigenerare gli indici di Lucene devi:
  • Eseguire lo shutdown di Alfresco

  • modificare il valore della property index.recovery:
  • index.recovery.mode=FULL
    all'interno del file alfresco-global.properties (se la property non è presente allora la devi aggiungere)
  • Riavviare l'istanza di Alfresco
batdan
Member II

Re: Ricerca lucene caratteri speciali

Ho una community edition con derby.
Non riesco a trovare alfresco-global.properties. Esiste un'alternativa?

Comunque, per tutte le altre proprietà, dichiarate come "data_protocollo", la ricerca funziona perfettamente, potrebbero essere il carattere slash di 29/03/2011 e il carattere meno dello uuid a dare fastidio a lucene?
openpj
Moderator
Moderator

Re: Ricerca lucene caratteri speciali

Ho una community edition con derby.
Non riesco a trovare alfresco-global.properties. Esiste un'alternativa?
Se hai una vecchia versione dovresti avere il custom-repository.properties all'interno del classloader condiviso, quindi sotto tomcat/shared/classes/alfresco/extension. Con JBoss invece jboss/conf/classes/alfresco/extension.

omunque, per tutte le altre proprietà, dichiarate come "data_protocollo", la ricerca funziona perfettamente, potrebbero essere il carattere slash di 29/03/2011 e il carattere meno dello uuid a dare fastidio a lucene?

Allora non è che da fastidio, ma dipende da come lo si configura  Smiley Happy

Si, tokenizzare un valore significa che Lucene memorizzerà all'interno degli indici i singoli valori separati da un carattere separatore. Ad esempio per la data Lucene farà in modo di trovarla solamente se cerchi solo per il giorno, il mese o l'anno. Per lo UUID invece solo se provi a cercare una delle quattro sequenze di caratteri alfanumerico che lo compongono.

Praticamente con tokenised=true Lucene memorizza i seguenti indici per la data 29/03/2011 e lo UUID bb5b0116-a449-4340-884d-5cd7de5c2214 :

Nodo X
29
03
2011

bb5b0116
a449
4340
884d
5cd7de5c2214

Quindi vuol dire che se provi a cercare la data completa ad esempio, Lucene non riesce a trovare il nodo, il medesimo risultato se si prova a cercare con lo UUID completo.

Invece con tokenised = false Lucene indicizza in questo modo:

29/03/2011
bb5b0116-a449-4340-884d-5cd7de5c2214

In quest'ultimo caso invece se si prova a cercare il nodo utilizzando il valore esatto, Lucene troverà i nodi.

Un'alternativa che può risolvere il problema, ma che può accrescere il numero degli indici è impostare il valore di tokenised a both, in questo modo verranno memorizzate negli indici entrambe le tokenizzazioni.

Spero ti sia utile  Smiley Wink
batdan
Member II

Re: Ricerca lucene caratteri speciali

Grazie per la disponibilità come sempre.
danilo