2016-11-02 108 views
0

我想用Lucene做查詢,我想選擇標題以「@」字符開頭的文檔。 我看了文檔,但結果是零元素。 這是代碼和結果。 感謝您的幫助。查詢選擇所有lucene的java

這是代碼:

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

,這是輸出

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

我想'@'由'StandardAnalyzer'被除去而索引 –

回答

0

您正在使用StandardAnalyzer它使用StandardTokenizer。在標準Toeknizer中,「@」字符屬於標記分裂標點符號集。

因此字符串「@aa Lucene in Action」 被標記爲「aa」,「Lucene」,「in」,「Action」標記。

您可以使用KeywordAnalyzer或WhitespaceAnalyzer,看看是否可以解決您的問題。

+0

我有變化 Q =新的QueryParser(LUCENE_41, 「標題」,新WhitespaceAnalyzer(LUCENE_41))。分析(查詢字符串) ; 但結果總是0 –

+0

在ypur queryString中,你可以嘗試'@ *'而不是「@」 – root545

+0

也嘗試搜索「@aa」並查看是否返回任何東西 – root545