2016-11-02 9 views
0

Ich versuche, Abfrage mit Lucene zu tun, und ich möchte die Dokumente auswählen, deren Titel mit dem "@" Zeichen beginnt. Ich schaute auf die Dokumentation, aber die Ergebnisse sind Null Elemente. Dies ist der Code und das Ergebnis. Danke für Ihre Hilfe.Abfrage alle auswählen lucene java

Dies ist der Code:

IndexWriter w = new IndexWriter(index, config); 
addDoc(w, "@aa Lucene in Action", "193398817"); 
addDoc(w, "@ba Lucene for Dummies", "55320055Z"); 
addDoc(w, "prova Managing Gigabytes", "55063554A"); 
addDoc(w, "The Art of Computer Science", "9900333X"); 
w.close(); 
String querystring = "@"; 

Query q; 
q = new QueryParser(LUCENE_41, "title", new StandardAnalyzer(LUCENE_41)).parse(querystring); 
IndexReader reader = DirectoryReader.open(index); 
IndexSearcher searcher = new IndexSearcher(reader); 
TopDocs docs = searcher.search(q, 1000000); 

ScoreDoc[] hits = docs.scoreDocs; 

System.out.println("Found " + hits.length + " hits."); 
for (int i = 0; i < hits.length; ++i) { 
    int docId = hits[i].doc; 
    Document d = searcher.doc(docId); 
    System.out.println((i + 1) + ". " + d.get("isbn") + "\t" + d.get("title")); 
} 

reader.close(); 

und dies ist der Ausgang

Building provaLucerne 1.0-SNAPSHOT 
------------------------------------------------------------------------ 

--- exec-maven-plugin:1.2.1:exec (default-cli) @ provaLucerne --- 
Found 0 hits. 
------------------------------------------------------------------------ 
BUILD SUCCESS 
------------------------------------------------------------------------ 
Total time: 1.505s 
Finished at: Wed Nov 02 19:49:39 CET 2016 
Final Memory: 5M/155M 
+0

4.1.0

+0

Ich denke, '@' durch die 'StandardAnalyzer' entfernt werden, während –

Antwort

0

Sie StandardAnalyzer verwenden, die StandardTokenizer verwendet. "@" -Zeichen gehört zu den Token-Splitting-Interpunktionszeichen im Standard-Toeknizer.

so die Zeichenfolge "@aa Lucene in Aktion" wird in "aa", "Lucene", "in", "Aktion" Tokens Tokenized.

Sie können KeywordAnalyzer oder WhitespaceAnalyzer verwenden und sehen, ob das Ihr Problem löst.

+0

Indizierung ich habe Änderung q = new QueryParser (LUCENE_41, "Titel", neue WhitespaceAnalyzer (LUCENE_41)). Parsen (Abfragezeichenfolgeflag) ; aber das Ergebnis ist immer 0 –

+0

in ypur queryString können Sie versuchen, @ @ stattdessen @ @ – root545

+0

auch versuchen Sie suchen nach @aa und sehen, ob das alles – root545