Problem finding similar documents with MoreLikeThis method.

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Problem finding similar documents with MoreLikeThis method.

Davide-23
Hi,
I used the method MoreLikeThis (in search.similar package) of Lucene to
find similar documents, but the result is 0 documents also when I index
more times the same document. I don't understand why the search doesn't
work... Here I give you the code I used:

----------------------------------------------------------------------------

Directory indexDir = FSDirectory.getDirectory(INDEX_DIR, false);

IndexReader ir = IndexReader.open(indexDir);

IndexSearcher is = new IndexSearcher(indexDir);
       
MoreLikeThis mlt = new MoreLikeThis(ir);

Query query = mlt.like( *FileToSearchSimilar* );
       
System.out.println("The Query is: " + query);
       
Hits hits = is.search(query);
               
for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
           
        Hit hit = (Hit)iterDoc.next();
        System.out.println("\n\nSimilar file: "+hit.get("path"));
}
       
               
ir.close();
is.close();
-----------------------------------------------------------------------------

Note that:
1) *FindToSearchSimilar* is a File i passed to MoreLikeThis
2) The index alredy contains *FileToSearchSimilar* (I previously indexed
more times the file)
3) The System.out.println("The Query is :" + query) print an empty query.

In the beginning I thought that the reason was I indexed field of files
without Field.TermVector.YES, but after I added a field (the same for
every doc) for each document in the index with this option, but nothing...

Sincerly I can't find the reason why MoreLikeThis doesn't work... I hope
someone have a suggestion or a solution.

Thanks in advance
Davide.



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

mark harwood
Looks like the class defaults to only searching a field called "contents".

Either:
a) call setFieldNames() with null to force the class to use a list of all indexed fields derived from your IndexReader
or
b) call setFieldNames() with the explicit shortlist of field names you want to match on


Cheers
Mark

----- Original Message ----
From: Davide <[hidden email]>
To: [hidden email]
Sent: Wednesday, 19 July, 2006 9:40:31 AM
Subject: Problem finding similar documents with MoreLikeThis method.

Hi,
I used the method MoreLikeThis (in search.similar package) of Lucene to
find similar documents, but the result is 0 documents also when I index
more times the same document. I don't understand why the search doesn't
work... Here I give you the code I used:

----------------------------------------------------------------------------

Directory indexDir = FSDirectory.getDirectory(INDEX_DIR, false);

IndexReader ir = IndexReader.open(indexDir);

IndexSearcher is = new IndexSearcher(indexDir);
   
MoreLikeThis mlt = new MoreLikeThis(ir);

Query query = mlt.like( *FileToSearchSimilar* );
   
System.out.println("The Query is: " + query);
   
Hits hits = is.search(query);
       
for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
           
    Hit hit = (Hit)iterDoc.next();
    System.out.println("\n\nSimilar file: "+hit.get("path"));
}
   
       
ir.close();
is.close();
-----------------------------------------------------------------------------

Note that:
1) *FindToSearchSimilar* is a File i passed to MoreLikeThis
2) The index alredy contains *FileToSearchSimilar* (I previously indexed
more times the file)
3) The System.out.println("The Query is :" + query) print an empty query.

In the beginning I thought that the reason was I indexed field of files
without Field.TermVector.YES, but after I added a field (the same for
every doc) for each document in the index with this option, but nothing...

Sincerly I can't find the reason why MoreLikeThis doesn't work... I hope
someone have a suggestion or a solution.

Thanks in advance
Davide.



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

Davide-23

mark harwood wrote:

> Looks like the class defaults to only searching a field called "contents".
>
> Either:
> a) call setFieldNames() with null to force the class to use a list of all indexed fields derived from your IndexReader
> or
> b) call setFieldNames() with the explicit shortlist of field names you want to match on
>
>
> Cheers
> Mark
>
I've tried but It still doesn't work. I've called the method:

setFieldNames(new String[]{"Field1", "Field2", ...}) with "Field1",
"Field2" the fields I used when I index the files but nothing *Query* is
still empty and MoreLikeThis doesn't work... I don't think the problem
is this.


For simplicity I give you a general code (a test) that doesn't work, You
can try it and tell me if also for you the code doesn't work...

I have also tried the *main* code of MoreLikeThis class and it doesn't
work.. (I have changed the Index_dir and the document to add to index)

------------------------------------------------------------------------
-------------------- MoreLikeThis Test ---------------------------------
------------------------------------------------------------------------
       
//Build an IndexWriter object to build an index
IndexWriter writer = new IndexWriter("C:\\Temp\\index", new
StandardAnalyzer(), true);
       
//----- Adding a document to index ----
Document doc = new Document();
File f = new File("C:\\Document.txt");
FileReader fileReader = new FileReader(f);
               
Field field = new Field("contents", fileReader, Field.TermVector.YES);
       
doc.add(field);
writer.addDocument(doc);
//--------------------------------------

       
//Optimize index and close
writer.optimize();
System.out.println("The documents in the index are: "+writer.docCount());
writer.close();
               
                   
//-------- Now try to find similar documents

Directory indexDir = FSDirectory.getDirectory("C:\\Temp\\index", false);

IndexReader ir = IndexReader.open(indexDir);

MoreLikeThis mlt = new MoreLikeThis(ir);

//mlt.setFieldNames(new String[] {"contents"});

Query query = null;
if (fr != null){
        System.out.println("Parsing FileReader: " + fr);
        query = mlt.like(fr);
       
}
               
System.out.println("The Query is: " + query);
                   
IndexSearcher is = new IndexSearcher(indexDir);
                   
Hits hits = is.search(query);
                   
for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
                       
        Hit hit = (Hit)iterDoc.next();    
        System.out.println("\n\nSimilar file: "+hit.get("contents"));
}
------------------------------------------------------------------------------
               
NOTE:
1) Document.txt is a text file containg some text


I really don't understand why It doesn't work... I'm feel lost... :(




Riprendo quanto scritto da anonimo in precedenza (con piccole correzioni), per dargli il giusto risalto, in quanto le argomentazioni addotte mi paiono assolutamente interessanti.

-----------------------------------------

L'obbligo di corrispondere ad un Ente X una tassa di possesso di un'apparecchiatura Z per fruizione di servizi erogati da X ma anche, in parte preponderante e totalmente gratuita, da un insieme di altri Enti YY, condiziona in modo grave il diritto dell'utenza alla fruizione gratuita dei soli servizi erogati da YY.
Se l'Ente X si configura come servizio pubblico deve erogare solo servizio pubblico non finalizzato a lucro, e solo chi lo utilizza può essere assoggettato a pagamento a favore del Pubblico Erario (e non certo di X) di un equo corrispettivo del servizio effettivamente goduto, indipendentemente da dubbie controversie sul possesso di apparecchiature Z.
Se l'Ente X non si configurasse come servizio pubblico, o anche laddove il servizio di X assumesse di fatto le stesse caratteristiche di servizi privati forniti da Enti YY venendo meno alle regole di servizio pubblico, diventerebbe discriminatoria della libera concorrenza e implicitamente anticostituzionale qualsiasi legge proponente introiti a favore del solo operatore X e quindi a danno degli operatori YY.
Allo stato dell'arte attuale, pagare solo X per detenere un sistema Z di fruizione dei servizi di X+YY è quanto meno ingiusto, monopolistico, anticoncorrenziale, iniquamente penalizzante gli Enti YY, oltre che disgustoso nella forma in cui è imposto.
E' come se i proventi della tassa di circolazione auto li incamerasse per legge solo una certa azienda automobilistica nazionale... (a parte che la realtà non sarà molto diversa).

---------------------------------------

Premesso ciò, ed in attesa che le nuove tecnologie di Z trasformino le modalità di fruizione di detti servizi, rendendo possibili forme di pagamento basate sugli effettivi utilizzi di quanto erogato sia da X che da YY a condizioni liberamente accettate dall'Utenza, diamo una serie di consigli comportamentali, praticamente un prontuario per l'Utenza stessa.

-----------------------------------------------
Consigli comportamentali per l'Utenza.
-----------------------------------------------

Non possedete apparecchiature di tipo Z ossia soggette a versamento canone, e X insiste a chiedervelo sottintendendo che siete evasore e minacciandovi in conseguenza: inviate ad X raccomandata RR in cui dichiarate sotto Vs. responsabilità di non avere alcun possesso di Z marchingeni soggetti a canone, ma aggiungete che dimostrazione contraria spetta a X, restando voi disponibili a verifica ispettiva legalmente autorizzata, ma evidenziate che qualunque abuso in tal senso, come anche qualsiasi ulteriore insistenza di richieste accompagnata o meno da velate minacce o anche qualunque acquisizione illecita e/o non documentata di Vs. informazioni personali coperte da privacy verranno valutate in sede competente.

Possedete un marchingeno Z soggetto a canone di cui già corrispondete ad X tassa di possesso, e desiderate liberarvene: idem come sopra, stessa procedura, stessa raccomandata RR, cambia solo la frase "dichiaro di non possedere" con la frase "dichiaro di non aver più in mio possesso". E' sufficente, garantito!

Avete appena acquistato un apparecchio Z, o ve lo hanno regalato, o l'avete vinto alla lotteria, insomma ne siete in possesso, ma non lo avete ancora regolarizzato, ad esempio perchè non avete fatto in tempo in quanto ve lo ha da poco regalato un altro soggetto regolarmente abbonato, come vostro nonno non convivente. Ma intanto, come rapace falco, il sinistro ispettore dell'Ente X vi piomba alla porta tra capo e collo: prima di concedere l'accesso alla Vs. abitazione verificate bene l'attendibilità delle credenziali di chi pretende di ispezionarvi attraverso l'apertura parziale della porta bloccata dal catenino, e se la cosa non appare più che legittima o anche se solo la qualifica con cui si è definito inizialmente il personaggio non corrisponde perfettamente alle credenziali esibite, chiamate direttamente la Polizia (113) denunciando tentata violazione di domicilio e/o millantato credito, ma se non ve la sentite semplicemente chiudete la porta contestando l'intervento; eventualmente il 113 lo farete se il sinistro figuro prende a calci la porta... Se invece tutto è legalmente autorizzato (ed è improbabile), prima di togliere la catena dichiarate spontaneamente a priori il regalo, l'acquisto, la vincita o altro di X come cosa appena avvenuta, ed esternate la vostra intenzione di regolarizzarne il possesso appena possibile: l'ispettore di X ha raggiunto il suo scopo (assicurarsi la provvigione per acquisizione nuovo abbonato), vi farà firmare tale dichiarazione, vi consegnerà il modulo di abbonamento standard non maggiorato, e vedrete che si placherà senza neppure entrare. Chiaramente anche il giorno dopo potreste decidere di buttar via l'apparecchio Z in questione, disgustati dalla qualità dei programmi trasmessi ...! In tal caso procedete come al punto precedente.

Non dovrebbero esseci altre casistiche (l'ultima va opportunamente interpretata).

---------------------------------------

Ovviamente, dopo aver ricevuto RR di ritorno relativa a raccomandata inviata ad X coi suddenti contenuti, potete permettervi di ignorare ulteriori comunicazioni; non state a mettere in campo altre sanguisughe per la soddisfazione di far zittire X, lasciate fare, siate superiori a queste beghe...

Comunque è buona norma acquistare sempre Z in contanti, ed anche componenti isolati di Z, o comunque riconducibili a presenza di Z, in modo da non lasciar alcuna traccia dei Vs. acquisti; a meno che non vogliate divertirvi a mettere in crisi X, che vi piomberà addoso entro 6 mesi, e potete farlo accusando X di essere entrato in possesso di Vs. info coperte da privacy di cui non vi ha concesso preventiva documentazione di liceità e di identificazione delle fonti; ma sappiate che nel giro trascinate pure il punto vendita e la Vs. banca ... si sa benissimo chi è coinvolto. Però ripeto, certe soddisfazioni costano quintali di sanguisughe, secondo me molto di più della contropartita del sottile piacere che potreste gustare dopo anni.

Date retta a me, siate superiori a queste beghe, e godetevi le Vs. risorse. In santa pace.

A buon intenditor poche parole.

Bye.
-----------------------------------------------------------
Modificato dall' autore il 01 giugno 2006 19.54
-----------------------------------------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

mark harwood
>>if (fr != null){
>>    System.out.println("Parsing FileReader: " + fr);
>>    query = mlt.like(fr);

Not clear from your code but "fr" isn't the same object as "fileReader" is it?
If so, that could be positioned at the end of the file and MoreLikeThis would therefore read nothing.



----- Original Message ----
From: Davide <[hidden email]>
To: [hidden email]
Sent: Wednesday, 19 July, 2006 11:28:38 AM
Subject: Re: Problem finding similar documents with MoreLikeThis method.


mark harwood wrote:

> Looks like the class defaults to only searching a field called "contents".
>
> Either:
> a) call setFieldNames() with null to force the class to use a list of all indexed fields derived from your IndexReader
> or
> b) call setFieldNames() with the explicit shortlist of field names you want to match on
>
>
> Cheers
> Mark
>

I've tried but It still doesn't work. I've called the method:

setFieldNames(new String[]{"Field1", "Field2", ...}) with "Field1",
"Field2" the fields I used when I index the files but nothing *Query* is
still empty and MoreLikeThis doesn't work... I don't think the problem
is this.


For simplicity I give you a general code (a test) that doesn't work, You
can try it and tell me if also for you the code doesn't work...

I have also tried the *main* code of MoreLikeThis class and it doesn't
work.. (I have changed the Index_dir and the document to add to index)

------------------------------------------------------------------------
-------------------- MoreLikeThis Test ---------------------------------
------------------------------------------------------------------------
   
//Build an IndexWriter object to build an index
IndexWriter writer = new IndexWriter("C:\\Temp\\index", new
StandardAnalyzer(), true);
   
//----- Adding a document to index ----    
Document doc = new Document();
File f = new File("C:\\Document.txt");
FileReader fileReader = new FileReader(f);
               
Field field = new Field("contents", fileReader, Field.TermVector.YES);
   
doc.add(field);    
writer.addDocument(doc);
//--------------------------------------

   
//Optimize index and close
writer.optimize();
System.out.println("The documents in the index are: "+writer.docCount());
writer.close();
       
               
//-------- Now try to find similar documents

Directory indexDir = FSDirectory.getDirectory("C:\\Temp\\index", false);

IndexReader ir = IndexReader.open(indexDir);

MoreLikeThis mlt = new MoreLikeThis(ir);

//mlt.setFieldNames(new String[] {"contents"});

Query query = null;
if (fr != null){
    System.out.println("Parsing FileReader: " + fr);
    query = mlt.like(fr);
   
}    
       
System.out.println("The Query is: " + query);
               
IndexSearcher is = new IndexSearcher(indexDir);
                   
Hits hits = is.search(query);
                   
for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
                       
    Hit hit = (Hit)iterDoc.next();                
    System.out.println("\n\nSimilar file: "+hit.get("contents"));
}
------------------------------------------------------------------------------
       
NOTE:
1) Document.txt is a text file containg some text


I really don't understand why It doesn't work... I'm feel lost... :(




Riprendo quanto scritto da anonimo in precedenza (con piccole correzioni), per dargli il giusto risalto, in quanto le argomentazioni addotte mi paiono assolutamente interessanti.

-----------------------------------------

L'obbligo di corrispondere ad un Ente X una tassa di possesso di un'apparecchiatura Z per fruizione di servizi erogati da X ma anche, in parte preponderante e totalmente gratuita, da un insieme di altri Enti YY, condiziona in modo grave il diritto dell'utenza alla fruizione gratuita dei soli servizi erogati da YY.
Se l'Ente X si configura come servizio pubblico deve erogare solo servizio pubblico non finalizzato a lucro, e solo chi lo utilizza può essere assoggettato a pagamento a favore del Pubblico Erario (e non certo di X) di un equo corrispettivo del servizio effettivamente goduto, indipendentemente da dubbie controversie sul possesso di apparecchiature Z.
Se l'Ente X non si configurasse come servizio pubblico, o anche laddove il servizio di X assumesse di fatto le stesse caratteristiche di servizi privati forniti da Enti YY venendo meno alle regole di servizio pubblico, diventerebbe discriminatoria della libera concorrenza e implicitamente anticostituzionale qualsiasi legge proponente introiti a favore del solo operatore X e quindi a danno degli operatori YY.
Allo stato dell'arte attuale, pagare solo X per detenere un sistema Z di fruizione dei servizi di X+YY è quanto meno ingiusto, monopolistico, anticoncorrenziale, iniquamente penalizzante gli Enti YY, oltre che disgustoso nella forma in cui è imposto.
E' come se i proventi della tassa di circolazione auto li incamerasse per legge solo una certa azienda automobilistica nazionale... (a parte che la realtà non sarà molto diversa).

---------------------------------------

Premesso ciò, ed in attesa che le nuove tecnologie di Z trasformino le modalità di fruizione di detti servizi, rendendo possibili forme di pagamento basate sugli effettivi utilizzi di quanto erogato sia da X che da YY a condizioni liberamente accettate dall'Utenza, diamo una serie di consigli comportamentali, praticamente un prontuario per l'Utenza stessa.

-----------------------------------------------
Consigli comportamentali per l'Utenza.
-----------------------------------------------

Non possedete apparecchiature di tipo Z ossia soggette a versamento canone, e X insiste a chiedervelo sottintendendo che siete evasore e minacciandovi in conseguenza: inviate ad X raccomandata RR in cui dichiarate sotto Vs. responsabilità di non avere alcun possesso di Z marchingeni soggetti a canone, ma aggiungete che dimostrazione contraria spetta a X, restando voi disponibili a verifica ispettiva legalmente autorizzata, ma evidenziate che qualunque abuso in tal senso, come anche qualsiasi ulteriore insistenza di richieste accompagnata o meno da velate minacce o anche qualunque acquisizione illecita e/o non documentata di Vs. informazioni personali coperte da privacy verranno valutate in sede competente.

Possedete un marchingeno Z soggetto a canone di cui già corrispondete ad X tassa di possesso, e desiderate liberarvene: idem come sopra, stessa procedura, stessa raccomandata RR, cambia solo la frase "dichiaro di non possedere" con la frase "dichiaro di non aver più in mio possesso". E' sufficente, garantito!

Avete appena acquistato un apparecchio Z, o ve lo hanno regalato, o l'avete vinto alla lotteria, insomma ne siete in possesso, ma non lo avete ancora regolarizzato, ad esempio perchè non avete fatto in tempo in quanto ve lo ha da poco regalato un altro soggetto regolarmente abbonato, come vostro nonno non convivente. Ma intanto, come rapace falco, il sinistro ispettore dell'Ente X vi piomba alla porta tra capo e collo: prima di concedere l'accesso alla Vs. abitazione verificate bene l'attendibilità delle credenziali di chi pretende di ispezionarvi attraverso l'apertura parziale della porta bloccata dal catenino, e se la cosa non appare più che legittima o anche se solo la qualifica con cui si è definito inizialmente il personaggio non corrisponde perfettamente alle credenziali esibite, chiamate direttamente la Polizia (113) denunciando tentata violazione di domicilio e/o millantato credito, ma se non ve la sentite semplicemente chiudete la porta contestando l'intervento;
 eventualmente il 113 lo farete se il sinistro figuro prende a calci la porta... Se invece tutto è legalmente autorizzato (ed è improbabile), prima di togliere la catena dichiarate spontaneamente a priori il regalo, l'acquisto, la vincita o altro di X come cosa appena avvenuta, ed esternate la vostra intenzione di regolarizzarne il possesso appena possibile: l'ispettore di X ha raggiunto il suo scopo (assicurarsi la provvigione per acquisizione nuovo abbonato), vi farà firmare tale dichiarazione, vi consegnerà il modulo di abbonamento standard non maggiorato, e vedrete che si placherà senza neppure entrare. Chiaramente anche il giorno dopo potreste decidere di buttar via l'apparecchio Z in questione, disgustati dalla qualità dei programmi trasmessi ...! In tal caso procedete come al punto precedente.

Non dovrebbero esseci altre casistiche (l'ultima va opportunamente interpretata).

---------------------------------------

Ovviamente, dopo aver ricevuto RR di ritorno relativa a raccomandata inviata ad X coi suddenti contenuti, potete permettervi di ignorare ulteriori comunicazioni; non state a mettere in campo altre sanguisughe per la soddisfazione di far zittire X, lasciate fare, siate superiori a queste beghe...

Comunque è buona norma acquistare sempre Z in contanti, ed anche componenti isolati di Z, o comunque riconducibili a presenza di Z, in modo da non lasciar alcuna traccia dei Vs. acquisti; a meno che non vogliate divertirvi a mettere in crisi X, che vi piomberà addoso entro 6 mesi, e potete farlo accusando X di essere entrato in possesso di Vs. info coperte da privacy di cui non vi ha concesso preventiva documentazione di liceità e di identificazione delle fonti; ma sappiate che nel giro trascinate pure il punto vendita e la Vs. banca ... si sa benissimo chi è coinvolto. Però ripeto, certe soddisfazioni costano quintali di sanguisughe, secondo me molto di più della contropartita del sottile piacere che potreste gustare dopo anni.

Date retta a me, siate superiori a queste beghe, e godetevi le Vs. risorse. In santa pace.

A buon intenditor poche parole.

Bye.
-----------------------------------------------------------
Modificato dall' autore il 01 giugno 2006 19.54
-----------------------------------------------------------


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

Davide-23
Thanks Mark,

Yes "fr" is fileReader but I don't think is positioned at the end of
file because the same problem occurs when I pass to MoreLikeThis the
File (C:\\Document.txt) instead of a fileReader...


So also if I write:

MoreLikeThis mlt = new MoreLikeThis(ir);
Query query = mlt.like(new File(C:\\Document.txt));

query is empty... I don't know...


mark harwood wrote:

>>> if (fr != null){
>>>    System.out.println("Parsing FileReader: " + fr);
>>>    query = mlt.like(fr);
>
> Not clear from your code but "fr" isn't the same object as "fileReader" is it?
> If so, that could be positioned at the end of the file and MoreLikeThis would therefore read nothing.
>
>
>
> ----- Original Message ----
> From: Davide <[hidden email]>
> To: [hidden email]
> Sent: Wednesday, 19 July, 2006 11:28:38 AM
> Subject: Re: Problem finding similar documents with MoreLikeThis method.
>
>
> mark harwood wrote:
>> Looks like the class defaults to only searching a field called "contents".
>>
>> Either:
>> a) call setFieldNames() with null to force the class to use a list of all indexed fields derived from your IndexReader
>> or
>> b) call setFieldNames() with the explicit shortlist of field names you want to match on
>>
>>
>> Cheers
>> Mark
>>
>
> I've tried but It still doesn't work. I've called the method:
>
> setFieldNames(new String[]{"Field1", "Field2", ...}) with "Field1",
> "Field2" the fields I used when I index the files but nothing *Query* is
> still empty and MoreLikeThis doesn't work... I don't think the problem
> is this.
>
>
> For simplicity I give you a general code (a test) that doesn't work, You
> can try it and tell me if also for you the code doesn't work...
>
> I have also tried the *main* code of MoreLikeThis class and it doesn't
> work.. (I have changed the Index_dir and the document to add to index)
>
> ------------------------------------------------------------------------
> -------------------- MoreLikeThis Test ---------------------------------
> ------------------------------------------------------------------------
>    
> //Build an IndexWriter object to build an index
> IndexWriter writer = new IndexWriter("C:\\Temp\\index", new
> StandardAnalyzer(), true);
>    
> //----- Adding a document to index ----    
> Document doc = new Document();
> File f = new File("C:\\Document.txt");
> FileReader fileReader = new FileReader(f);
>                
> Field field = new Field("contents", fileReader, Field.TermVector.YES);
>    
> doc.add(field);    
> writer.addDocument(doc);
> //--------------------------------------
>
>    
> //Optimize index and close
> writer.optimize();
> System.out.println("The documents in the index are: "+writer.docCount());
> writer.close();
>        
>                
> //-------- Now try to find similar documents
>
> Directory indexDir = FSDirectory.getDirectory("C:\\Temp\\index", false);
>
> IndexReader ir = IndexReader.open(indexDir);
>
> MoreLikeThis mlt = new MoreLikeThis(ir);
>
> //mlt.setFieldNames(new String[] {"contents"});
>
> Query query = null;
> if (fr != null){
>     System.out.println("Parsing FileReader: " + fr);
>     query = mlt.like(fr);
>    
> }    
>        
> System.out.println("The Query is: " + query);
>                
> IndexSearcher is = new IndexSearcher(indexDir);
>                    
> Hits hits = is.search(query);
>                    
> for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
>                        
>     Hit hit = (Hit)iterDoc.next();                
>     System.out.println("\n\nSimilar file: "+hit.get("contents"));
> }
> ------------------------------------------------------------------------------
>        
> NOTE:
> 1) Document.txt is a text file containg some text
>
>
> I really don't understand why It doesn't work... I'm feel lost... :(
>
>
>
>
> Riprendo quanto scritto da anonimo in precedenza (con piccole correzioni), per dargli il giusto risalto, in quanto le argomentazioni addotte mi paiono assolutamente interessanti.
>
> -----------------------------------------
>
> L'obbligo di corrispondere ad un Ente X una tassa di possesso di un'apparecchiatura Z per fruizione di servizi erogati da X ma anche, in parte preponderante e totalmente gratuita, da un insieme di altri Enti YY, condiziona in modo grave il diritto dell'utenza alla fruizione gratuita dei soli servizi erogati da YY.
> Se l'Ente X si configura come servizio pubblico deve erogare solo servizio pubblico non finalizzato a lucro, e solo chi lo utilizza può essere assoggettato a pagamento a favore del Pubblico Erario (e non certo di X) di un equo corrispettivo del servizio effettivamente goduto, indipendentemente da dubbie controversie sul possesso di apparecchiature Z.
> Se l'Ente X non si configurasse come servizio pubblico, o anche laddove il servizio di X assumesse di fatto le stesse caratteristiche di servizi privati forniti da Enti YY venendo meno alle regole di servizio pubblico, diventerebbe discriminatoria della libera concorrenza e implicitamente anticostituzionale qualsiasi legge proponente introiti a favore del solo operatore X e quindi a danno degli operatori YY.
> Allo stato dell'arte attuale, pagare solo X per detenere un sistema Z di fruizione dei servizi di X+YY è quanto meno ingiusto, monopolistico, anticoncorrenziale, iniquamente penalizzante gli Enti YY, oltre che disgustoso nella forma in cui è imposto.
> E' come se i proventi della tassa di circolazione auto li incamerasse per legge solo una certa azienda automobilistica nazionale... (a parte che la realtà non sarà molto diversa).
>
> ---------------------------------------
>
> Premesso ciò, ed in attesa che le nuove tecnologie di Z trasformino le modalità di fruizione di detti servizi, rendendo possibili forme di pagamento basate sugli effettivi utilizzi di quanto erogato sia da X che da YY a condizioni liberamente accettate dall'Utenza, diamo una serie di consigli comportamentali, praticamente un prontuario per l'Utenza stessa.
>
> -----------------------------------------------
> Consigli comportamentali per l'Utenza.
> -----------------------------------------------
>
> Non possedete apparecchiature di tipo Z ossia soggette a versamento canone, e X insiste a chiedervelo sottintendendo che siete evasore e minacciandovi in conseguenza: inviate ad X raccomandata RR in cui dichiarate sotto Vs. responsabilità di non avere alcun possesso di Z marchingeni soggetti a canone, ma aggiungete che dimostrazione contraria spetta a X, restando voi disponibili a verifica ispettiva legalmente autorizzata, ma evidenziate che qualunque abuso in tal senso, come anche qualsiasi ulteriore insistenza di richieste accompagnata o meno da velate minacce o anche qualunque acquisizione illecita e/o non documentata di Vs. informazioni personali coperte da privacy verranno valutate in sede competente.
>
> Possedete un marchingeno Z soggetto a canone di cui già corrispondete ad X tassa di possesso, e desiderate liberarvene: idem come sopra, stessa procedura, stessa raccomandata RR, cambia solo la frase "dichiaro di non possedere" con la frase "dichiaro di non aver più in mio possesso". E' sufficente, garantito!
>
> Avete appena acquistato un apparecchio Z, o ve lo hanno regalato, o l'avete vinto alla lotteria, insomma ne siete in possesso, ma non lo avete ancora regolarizzato, ad esempio perchè non avete fatto in tempo in quanto ve lo ha da poco regalato un altro soggetto regolarmente abbonato, come vostro nonno non convivente. Ma intanto, come rapace falco, il sinistro ispettore dell'Ente X vi piomba alla porta tra capo e collo: prima di concedere l'accesso alla Vs. abitazione verificate bene l'attendibilità delle credenziali di chi pretende di ispezionarvi attraverso l'apertura parziale della porta bloccata dal catenino, e se la cosa non appare più che legittima o anche se solo la qualifica con cui si è definito inizialmente il personaggio non corrisponde perfettamente alle credenziali esibite, chiamate direttamente la Polizia (113) denunciando tentata violazione di domicilio e/o millantato credito, ma se non ve la sentite semplicemente chiudete la porta contestando l'intervento;
>  eventualmente il 113 lo farete se il sinistro figuro prende a calci la porta... Se invece tutto è legalmente autorizzato (ed è improbabile), prima di togliere la catena dichiarate spontaneamente a priori il regalo, l'acquisto, la vincita o altro di X come cosa appena avvenuta, ed esternate la vostra intenzione di regolarizzarne il possesso appena possibile: l'ispettore di X ha raggiunto il suo scopo (assicurarsi la provvigione per acquisizione nuovo abbonato), vi farà firmare tale dichiarazione, vi consegnerà il modulo di abbonamento standard non maggiorato, e vedrete che si placherà senza neppure entrare. Chiaramente anche il giorno dopo potreste decidere di buttar via l'apparecchio Z in questione, disgustati dalla qualità dei programmi trasmessi ...! In tal caso procedete come al punto precedente.
>
> Non dovrebbero esseci altre casistiche (l'ultima va opportunamente interpretata).
>
> ---------------------------------------
>
> Ovviamente, dopo aver ricevuto RR di ritorno relativa a raccomandata inviata ad X coi suddenti contenuti, potete permettervi di ignorare ulteriori comunicazioni; non state a mettere in campo altre sanguisughe per la soddisfazione di far zittire X, lasciate fare, siate superiori a queste beghe...
>
> Comunque è buona norma acquistare sempre Z in contanti, ed anche componenti isolati di Z, o comunque riconducibili a presenza di Z, in modo da non lasciar alcuna traccia dei Vs. acquisti; a meno che non vogliate divertirvi a mettere in crisi X, che vi piomberà addoso entro 6 mesi, e potete farlo accusando X di essere entrato in possesso di Vs. info coperte da privacy di cui non vi ha concesso preventiva documentazione di liceità e di identificazione delle fonti; ma sappiate che nel giro trascinate pure il punto vendita e la Vs. banca ... si sa benissimo chi è coinvolto. Però ripeto, certe soddisfazioni costano quintali di sanguisughe, secondo me molto di più della contropartita del sottile piacere che potreste gustare dopo anni.
>
> Date retta a me, siate superiori a queste beghe, e godetevi le Vs. risorse. In santa pace.
>
> A buon intenditor poche parole.
>
> Bye.
> -----------------------------------------------------------
> Modificato dall' autore il 01 giugno 2006 19.54
> -----------------------------------------------------------
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

mark harwood
Does your index have only the one document?

MoreLikeThis will only generate queries with terms that occur in more than "minDocFreq" (default setting is 5).

This is to avoid the large overheads associated with searching for very common words in your example text.




----- Original Message ----
From: Davide <[hidden email]>
To: [hidden email]
Sent: Wednesday, 19 July, 2006 11:55:54 AM
Subject: Re: Problem finding similar documents with MoreLikeThis method.

Thanks Mark,

Yes "fr" is fileReader but I don't think is positioned at the end of
file because the same problem occurs when I pass to MoreLikeThis the
File (C:\\Document.txt) instead of a fileReader...


So also if I write:

MoreLikeThis mlt = new MoreLikeThis(ir);
Query query = mlt.like(new File(C:\\Document.txt));

query is empty... I don't know...


mark harwood wrote:

>>> if (fr != null){
>>>    System.out.println("Parsing FileReader: " + fr);
>>>    query = mlt.like(fr);
>
> Not clear from your code but "fr" isn't the same object as "fileReader" is it?
> If so, that could be positioned at the end of the file and MoreLikeThis would therefore read nothing.
>
>
>
> ----- Original Message ----
> From: Davide <[hidden email]>
> To: [hidden email]
> Sent: Wednesday, 19 July, 2006 11:28:38 AM
> Subject: Re: Problem finding similar documents with MoreLikeThis method.
>
>
> mark harwood wrote:
>> Looks like the class defaults to only searching a field called "contents".
>>
>> Either:
>> a) call setFieldNames() with null to force the class to use a list of all indexed fields derived from your IndexReader
>> or
>> b) call setFieldNames() with the explicit shortlist of field names you want to match on
>>
>>
>> Cheers
>> Mark
>>
>
> I've tried but It still doesn't work. I've called the method:
>
> setFieldNames(new String[]{"Field1", "Field2", ...}) with "Field1",
> "Field2" the fields I used when I index the files but nothing *Query* is
> still empty and MoreLikeThis doesn't work... I don't think the problem
> is this.
>
>
> For simplicity I give you a general code (a test) that doesn't work, You
> can try it and tell me if also for you the code doesn't work...
>
> I have also tried the *main* code of MoreLikeThis class and it doesn't
> work.. (I have changed the Index_dir and the document to add to index)
>
> ------------------------------------------------------------------------
> -------------------- MoreLikeThis Test ---------------------------------
> ------------------------------------------------------------------------
>    
> //Build an IndexWriter object to build an index
> IndexWriter writer = new IndexWriter("C:\\Temp\\index", new
> StandardAnalyzer(), true);
>    
> //----- Adding a document to index ----    
> Document doc = new Document();
> File f = new File("C:\\Document.txt");
> FileReader fileReader = new FileReader(f);
>                
> Field field = new Field("contents", fileReader, Field.TermVector.YES);
>    
> doc.add(field);    
> writer.addDocument(doc);
> //--------------------------------------
>
>    
> //Optimize index and close
> writer.optimize();
> System.out.println("The documents in the index are: "+writer.docCount());
> writer.close();
>        
>                
> //-------- Now try to find similar documents
>
> Directory indexDir = FSDirectory.getDirectory("C:\\Temp\\index", false);
>
> IndexReader ir = IndexReader.open(indexDir);
>
> MoreLikeThis mlt = new MoreLikeThis(ir);
>
> //mlt.setFieldNames(new String[] {"contents"});
>
> Query query = null;
> if (fr != null){
>     System.out.println("Parsing FileReader: " + fr);
>     query = mlt.like(fr);
>    
> }    
>        
> System.out.println("The Query is: " + query);
>                
> IndexSearcher is = new IndexSearcher(indexDir);
>                    
> Hits hits = is.search(query);
>                    
> for (Iterator iterDoc = hits.iterator(); iterDoc.hasNext();) {
>                        
>     Hit hit = (Hit)iterDoc.next();                
>     System.out.println("\n\nSimilar file: "+hit.get("contents"));
> }
> ------------------------------------------------------------------------------
>        
> NOTE:
> 1) Document.txt is a text file containg some text
>
>
> I really don't understand why It doesn't work... I'm feel lost... :(
>
>
>
>
> Riprendo quanto scritto da anonimo in precedenza (con piccole correzioni), per dargli il giusto risalto, in quanto le argomentazioni addotte mi paiono assolutamente interessanti.
>
> -----------------------------------------
>
> L'obbligo di corrispondere ad un Ente X una tassa di possesso di un'apparecchiatura Z per fruizione di servizi erogati da X ma anche, in parte preponderante e totalmente gratuita, da un insieme di altri Enti YY, condiziona in modo grave il diritto dell'utenza alla fruizione gratuita dei soli servizi erogati da YY.
> Se l'Ente X si configura come servizio pubblico deve erogare solo servizio pubblico non finalizzato a lucro, e solo chi lo utilizza può essere assoggettato a pagamento a favore del Pubblico Erario (e non certo di X) di un equo corrispettivo del servizio effettivamente goduto, indipendentemente da dubbie controversie sul possesso di apparecchiature Z.
> Se l'Ente X non si configurasse come servizio pubblico, o anche laddove il servizio di X assumesse di fatto le stesse caratteristiche di servizi privati forniti da Enti YY venendo meno alle regole di servizio pubblico, diventerebbe discriminatoria della libera concorrenza e implicitamente anticostituzionale qualsiasi legge proponente introiti a favore del solo operatore X e quindi a danno degli operatori YY.
> Allo stato dell'arte attuale, pagare solo X per detenere un sistema Z di fruizione dei servizi di X+YY è quanto meno ingiusto, monopolistico, anticoncorrenziale, iniquamente penalizzante gli Enti YY, oltre che disgustoso nella forma in cui è imposto.
> E' come se i proventi della tassa di circolazione auto li incamerasse per legge solo una certa azienda automobilistica nazionale... (a parte che la realtà non sarà molto diversa).
>
> ---------------------------------------
>
> Premesso ciò, ed in attesa che le nuove tecnologie di Z trasformino le modalità di fruizione di detti servizi, rendendo possibili forme di pagamento basate sugli effettivi utilizzi di quanto erogato sia da X che da YY a condizioni liberamente accettate dall'Utenza, diamo una serie di consigli comportamentali, praticamente un prontuario per l'Utenza stessa.
>
> -----------------------------------------------
> Consigli comportamentali per l'Utenza.
> -----------------------------------------------
>
> Non possedete apparecchiature di tipo Z ossia soggette a versamento canone, e X insiste a chiedervelo sottintendendo che siete evasore e minacciandovi in conseguenza: inviate ad X raccomandata RR in cui dichiarate sotto Vs. responsabilità di non avere alcun possesso di Z marchingeni soggetti a canone, ma aggiungete che dimostrazione contraria spetta a X, restando voi disponibili a verifica ispettiva legalmente autorizzata, ma evidenziate che qualunque abuso in tal senso, come anche qualsiasi ulteriore insistenza di richieste accompagnata o meno da velate minacce o anche qualunque acquisizione illecita e/o non documentata di Vs. informazioni personali coperte da privacy verranno valutate in sede competente.
>
> Possedete un marchingeno Z soggetto a canone di cui già corrispondete ad X tassa di possesso, e desiderate liberarvene: idem come sopra, stessa procedura, stessa raccomandata RR, cambia solo la frase "dichiaro di non possedere" con la frase "dichiaro di non aver più in mio possesso". E' sufficente, garantito!
>
> Avete appena acquistato un apparecchio Z, o ve lo hanno regalato, o l'avete vinto alla lotteria, insomma ne siete in possesso, ma non lo avete ancora regolarizzato, ad esempio perchè non avete fatto in tempo in quanto ve lo ha da poco regalato un altro soggetto regolarmente abbonato, come vostro nonno non convivente. Ma intanto, come rapace falco, il sinistro ispettore dell'Ente X vi piomba alla porta tra capo e collo: prima di concedere l'accesso alla Vs. abitazione verificate bene l'attendibilità delle credenziali di chi pretende di ispezionarvi attraverso l'apertura parziale della porta bloccata dal catenino, e se la cosa non appare più che legittima o anche se solo la qualifica con cui si è definito inizialmente il personaggio non corrisponde perfettamente alle credenziali esibite, chiamate direttamente la Polizia (113) denunciando tentata violazione di domicilio e/o millantato credito, ma se non ve la sentite semplicemente chiudete la porta contestando l'intervento;
>  eventualmente il 113 lo farete se il sinistro figuro prende a calci la porta... Se invece tutto è legalmente autorizzato (ed è improbabile), prima di togliere la catena dichiarate spontaneamente a priori il regalo, l'acquisto, la vincita o altro di X come cosa appena avvenuta, ed esternate la vostra intenzione di regolarizzarne il possesso appena possibile: l'ispettore di X ha raggiunto il suo scopo (assicurarsi la provvigione per acquisizione nuovo abbonato), vi farà firmare tale dichiarazione, vi consegnerà il modulo di abbonamento standard non maggiorato, e vedrete che si placherà senza neppure entrare. Chiaramente anche il giorno dopo potreste decidere di buttar via l'apparecchio Z in questione, disgustati dalla qualità dei programmi trasmessi ...! In tal caso procedete come al punto precedente.
>
> Non dovrebbero esseci altre casistiche (l'ultima va opportunamente interpretata).
>
> ---------------------------------------
>
> Ovviamente, dopo aver ricevuto RR di ritorno relativa a raccomandata inviata ad X coi suddenti contenuti, potete permettervi di ignorare ulteriori comunicazioni; non state a mettere in campo altre sanguisughe per la soddisfazione di far zittire X, lasciate fare, siate superiori a queste beghe...
>
> Comunque è buona norma acquistare sempre Z in contanti, ed anche componenti isolati di Z, o comunque riconducibili a presenza di Z, in modo da non lasciar alcuna traccia dei Vs. acquisti; a meno che non vogliate divertirvi a mettere in crisi X, che vi piomberà addoso entro 6 mesi, e potete farlo accusando X di essere entrato in possesso di Vs. info coperte da privacy di cui non vi ha concesso preventiva documentazione di liceità e di identificazione delle fonti; ma sappiate che nel giro trascinate pure il punto vendita e la Vs. banca ... si sa benissimo chi è coinvolto. Però ripeto, certe soddisfazioni costano quintali di sanguisughe, secondo me molto di più della contropartita del sottile piacere che potreste gustare dopo anni.
>
> Date retta a me, siate superiori a queste beghe, e godetevi le Vs. risorse. In santa pace.
>
> A buon intenditor poche parole.
>
> Bye.
> -----------------------------------------------------------
> Modificato dall' autore il 01 giugno 2006 19.54
> -----------------------------------------------------------
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

Davide-23

mark harwood wrote:
> Does your index have only the one document?
>
> MoreLikeThis will only generate queries with terms that occur in more than "minDocFreq" (default setting is 5).
>
> This is to avoid the large overheads associated with searching for very common words in your example text.
>
>
>

Thanks very much Mark.
I have specified:

setMinDocFreq(0);

for testing and It works... the query now isn't empty and the search
return a document...
So I think that the "problem" was that...

Thank you
Davide.



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

Martin Braun-2
Hello,

inspired by this thread, I also tried to implement a MoreLikeThis
search. But I have the same Problem of a null query.

I did set the Fieldname to a Field that is stored in the Index.
But "like" just returns null.

Here is my Code:

                        Hits hits = this.is.search(new TermQuery(new Term("katkey", Katkey)));
                        System.out.println("DOCID:"+hits.id(0));
                        System.out.println("hits:"+hits.doc(0).getField("kurz").stringValue() );
                         MoreLikeThis mlt = new MoreLikeThis(this.ir);
                         mlt.setFieldNames( new String[] {"kurz"} );
                         mlt.setMinDocFreq(0);
                         Query query = mlt.like( hits.id(0) );
                         System.out.println("QUERY:"+query);
                         return this.query(query.toString(),0,10,0);


The Field "kurz" contains the following String:

003481627  M               <v>Swinton, Elizabeth DeSabato</v>: <a>¬The¬
graphic art of Onchi Koshiro</a> : innovation and tradition / Elizabeth
de Sab
ato Swinton
New York [u.a.]: Garland, <b>1986</b>. - XXVIII, 307, |&lt;180&gt;| S. :
zahlr. Ill.
ISBN 0-8240-6868-8


Any Ideas?

thanks in advance,
martin


Davide schrieb:

> mark harwood wrote:
>> Does your index have only the one document?
>>
>> MoreLikeThis will only generate queries with terms that occur in more than "minDocFreq" (default setting is 5).
>>
>> This is to avoid the large overheads associated with searching for very common words in your example text.
>>
>>
>>
>
> Thanks very much Mark.
> I have specified:
>
> setMinDocFreq(0);
>
> for testing and It works... the query now isn't empty and the search
> return a document...
> So I think that the "problem" was that...
>
> Thank you
> Davide.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

mark harwood
Does your index use StandardAnalyzer? Are your fields stored (Field.Store.YES)?

MoreLikeThis uses StandardAnalyzer by default to read the stored content from the example doc which may produce tokens that do not match those of the indexed content. Use setAnalyzer() to ensure they are in sync.




----- Original Message ----
From: Martin Braun <[hidden email]>
To: [hidden email]
Sent: Friday, 21 July, 2006 11:09:40 AM
Subject: Re: Problem finding similar documents with MoreLikeThis method.

Hello,

inspired by this thread, I also tried to implement a MoreLikeThis
search. But I have the same Problem of a null query.

I did set the Fieldname to a Field that is stored in the Index.
But "like" just returns null.

Here is my Code:

            Hits hits = this.is.search(new TermQuery(new Term("katkey", Katkey)));
            System.out.println("DOCID:"+hits.id(0));
            System.out.println("hits:"+hits.doc(0).getField("kurz").stringValue()    );
             MoreLikeThis mlt = new MoreLikeThis(this.ir);
             mlt.setFieldNames( new String[] {"kurz"} );
             mlt.setMinDocFreq(0);
             Query query = mlt.like( hits.id(0) );
             System.out.println("QUERY:"+query);
             return this.query(query.toString(),0,10,0);


The Field "kurz" contains the following String:

003481627  M               <v>Swinton, Elizabeth DeSabato</v>: <a>¬The¬
graphic art of Onchi Koshiro</a> : innovation and tradition / Elizabeth
de Sab
ato Swinton
New York [u.a.]: Garland, <b>1986</b>. - XXVIII, 307, |&lt;180&gt;| S. :
zahlr. Ill.
ISBN 0-8240-6868-8


Any Ideas?

thanks in advance,
martin


Davide schrieb:

> mark harwood wrote:
>> Does your index have only the one document?
>>
>> MoreLikeThis will only generate queries with terms that occur in more than "minDocFreq" (default setting is 5).
>>
>> This is to avoid the large overheads associated with searching for very common words in your example text.
>>
>>
>>
>
> Thanks very much Mark.
> I have specified:
>
> setMinDocFreq(0);
>
> for testing and It works... the query now isn't empty and the search
> return a document...
> So I think that the "problem" was that...
>
> Thank you
> Davide.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]





---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Problem finding similar documents with MoreLikeThis method.

Martin Braun-2
hi mark,
> Does your index use StandardAnalyzer? Are your fields stored (Field.Store.YES)?
Thanks! that was the hint in the right direction, the FIeld was Stored
but not indexed:

titleDocument.add(new Field("kurz", title.getKurz(), Field.Store.YES,
Field.Index.NO));
(That was the field for the short description of a document)

If I set the Fieldname to another Field (indexed with StandardAnalyzer)
which is Indexed (but not Stored) it works if I use the
like(StringReader ) Method but not with like(int docid).

This Code works:

                         MoreLikeThis mlt = new MoreLikeThis(this.ir);
                         mlt.setFieldNames( new String[] {"freitext"} );
                         mlt.setMinDocFreq(0);
       
         Query query = mlt.like(new
StringReader(hits.doc(0).getField("kurz").stringValue()));

                         System.out.println("QUERY:"+query);

but it doesn't Work with mlt.like( hits.id(0) ); - I think because the
like method uses then the unstored "freitext" Field?

However that works for me because I can get the Document-Data from the
Database and use the like(StringReader) method.


The generated MLT-Query gets very specific so it only finds the same
Doc. Do you have any hints with which parameters I should start to play
to get the query more general?  Perhaps setMaxQueryTerms?

>
> MoreLikeThis uses StandardAnalyzer by default to read the stored content from the example doc which may produce tokens that do not match those of the indexed content. Use setAnalyzer() to ensure they are in sync.
>
>
>
>
> ----- Original Message ----
> From: Martin Braun <[hidden email]>
> To: [hidden email]
> Sent: Friday, 21 July, 2006 11:09:40 AM
> Subject: Re: Problem finding similar documents with MoreLikeThis method.
>
> Hello,
>
> inspired by this thread, I also tried to implement a MoreLikeThis
> search. But I have the same Problem of a null query.
>
> I did set the Fieldname to a Field that is stored in the Index.
> But "like" just returns null.
>
> Here is my Code:
>
>             Hits hits = this.is.search(new TermQuery(new Term("katkey", Katkey)));
>             System.out.println("DOCID:"+hits.id(0));
>             System.out.println("hits:"+hits.doc(0).getField("kurz").stringValue()    );
>              MoreLikeThis mlt = new MoreLikeThis(this.ir);
>              mlt.setFieldNames( new String[] {"kurz"} );
>              mlt.setMinDocFreq(0);
>              Query query = mlt.like( hits.id(0) );
>              System.out.println("QUERY:"+query);
>              return this.query(query.toString(),0,10,0);
>
>
> The Field "kurz" contains the following String:
>
> 003481627  M               <v>Swinton, Elizabeth DeSabato</v>: <a>¬The¬
> graphic art of Onchi Koshiro</a> : innovation and tradition / Elizabeth
> de Sab
> ato Swinton
> New York [u.a.]: Garland, <b>1986</b>. - XXVIII, 307, |&lt;180&gt;| S. :
> zahlr. Ill.
> ISBN 0-8240-6868-8
>
>
> Any Ideas?
>
> thanks in advance,
> martin
>
>
> Davide schrieb:
>> mark harwood wrote:
>>> Does your index have only the one document?
>>>
>>> MoreLikeThis will only generate queries with terms that occur in more than "minDocFreq" (default setting is 5).
>>>
>>> This is to avoid the large overheads associated with searching for very common words in your example text.
>>>
>>>
>>>
>> Thanks very much Mark.
>> I have specified:
>>
>> setMinDocFreq(0);
>>
>> for testing and It works... the query now isn't empty and the search
>> return a document...
>> So I think that the "problem" was that...
>>
>> Thank you
>> Davide.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [hidden email]
>> For additional commands, e-mail: [hidden email]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>


--
Universitaetsbibliothek Heidelberg   Tel: +49 6221 54-2580
Ploeck 107-109, D-69117 Heidelberg   Fax: +49 6221 54-2623

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]