2016-11-02 75 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