2011-04-18 40 views
4

我从各种教程在那里上的Lucene的印象是,如果我这样做:如何设置用于PhraseQuery搜索的Lucene标准分析器?

IndexWriter writer = new IndexWriter(indexPath, new StandardAnalyzer(Version.LUCENE_CURRENT), true, IndexWriter.MaxFieldLength.LIMITED); 

Document doc = new Document(); 
Field title = new Field("title", titlefield, Field.Store.YES, Field.Index.ANALYZED); 
doc.add(title); 
writer.addDocument(doc); 
writer.optimize(); 
writer.close(); 

IndexReader ireader = IndexReader.open(indexPath); 
IndexSearcher indexsearcher = new IndexSearcher(ireader); 

Term term1 = new Term("title", "one"); 
Term term2 = new Term("title", "two"); 
PhraseQuery query = new PhraseQuery(); 
query.add(term1); 
query.add(term2); 
query.setSlop(2); 

是Lucene的应返回的所有查询包含“一”和“二”中的标题字段彼此2个字。但是我没有得到任何结果,因为我没有使用StandardAnalyzer进行搜索。那么如何在Lucene中进行邻近搜索呢?请问以下的QueryParser允许邻近搜索(使用波浪ε)

QueryParser queryParser = new QueryParser("title",new StandardAnalyzer()); 
Query query = queryParser.parse("test"); 

回答

3

是,当您分析使用的QueryParser查询,你将能够做到接近搜索。

总的来说,总是建议使用相同的分析仪进行索引和搜索。

BR,

克里斯

相关问题