cancel
Showing results for 
Search instead for 
Did you mean: 

Ricerca lucene caratteri speciali

batdan
Champ in-the-making
Champ in-the-making
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 8

openpj
Elite Collaborator
Elite Collaborator
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
Champ in-the-making
Champ in-the-making
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
Elite Collaborator
Elite Collaborator
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
Champ in-the-making
Champ in-the-making
Ma l'elemento tokenised non è false di default?
Come faccio a rigenerare gli indici di lucene?
grazie

openpj
Elite Collaborator
Elite Collaborator
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
Champ in-the-making
Champ in-the-making
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
Elite Collaborator
Elite Collaborator
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
Champ in-the-making
Champ in-the-making
Grazie per la disponibilità come sempre.
danilo
Getting started

Tags


Find what you came for

We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.