2016-11-02 3 views
0

J'essaie de faire une requête avec Lucene et je voudrais sélectionner les documents dont le titre commence par le caractère "@". J'ai regardé la documentation mais le résultat est zéro élément. Ceci est le code et le résultat. Merci pour votre aide.Interroger tout sélectionner lucene java

Voici le 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(); 

et c'est la sortie

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

Je suppose que '' @ sont éliminés par le 'StandardAnalyzer' lors de l'indexation –

Répondre

0

Vous utilisez StandardAnalyzer qui utilise StandardTokenizer. Le caractère "@" fait partie de l'ensemble de ponctuation de séparation de jetons, en standard Toeknizer. Donc la chaîne "@aa Lucene in Action" est segmentée en "aa", "Lucene", "in", "Action" jetons.

Vous pouvez utiliser KeywordAnalyzer ou WhitespaceAnalyzer et voir si cela résout votre problème.

+0

j'ai changement q = new. QueryParser (LUCENE_41, "title", nouvelle WhitespaceAnalyzer (LUCENE_41)) analyser (querystring) ; mais le résultat est toujours 0 –

+0

dans ypur queryString pouvez-vous essayer '@ *' à la place "@" – root545

+0

également essayer de rechercher "@aa" et voir si cela renvoie – root545