【发布时间】:2016-07-04 14:33:59
【问题描述】:
我是 Lucene 的新手。我正在使用 Lucene-3.6.0.jar 在 java 中使用 Lucene。我按照http://www.tutorialspoint.com/lucene/ 的教程进行操作。我的基本代码如下:
public class LuceneTester {
String indexDir = "Data/Indexdir";
String dataDir = "Data/Datadir";
Indexer indexer;
Searcher searcher;
public static void test() {
LuceneTester tester;
try {
tester = new LuceneTester();
tester.createIndex();
tester.search("malformed");
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
private void createIndex() throws IOException {
indexer = new Indexer(indexDir);
int numIndexed;
long startTime = System.currentTimeMillis();
numIndexed = indexer.createIndex(dataDir, new TextFileFilter());
long endTime = System.currentTimeMillis();
indexer.close();
System.out.println(numIndexed + " File indexed, time taken: "
+ (endTime - startTime) + " ms");
}
private void search(String searchQuery) throws IOException, ParseException {
searcher = new Searcher(indexDir);
long startTime = System.currentTimeMillis();
Term term = new Term(LuceneConstants.CONTENTS, searchQuery);
Query query = new FuzzyQuery(term);
System.out.println("Query: " + query.toString());
TopDocs hits = searcher.search(query, Sort.RELEVANCE);
long endTime = System.currentTimeMillis();
System.out.println(hits.totalHits + " documents found. Time :"
+ (endTime - startTime));
for (ScoreDoc scoreDoc : hits.scoreDocs) {
Document doc = searcher.getDocument(scoreDoc);
System.out.println("File: " + doc.get(LuceneConstants.FILE_PATH));
}
searcher.close();
}
现在,我想使用 BM25 相似度而不是默认评分技术。怎么做?
【问题讨论】:
-
只是把它扔在那里,如果你刚开始使用 Lucene,如果可能的话,你最好学习一个更新的版本。自 3.6 以来,Lucene 的 API 发生了相当大的变化。我相信 Lucene 3.6 没有开箱即用的 BM25 实现。在当前版本 (6.1) 中,BM25 实际上是默认相似度,还有许多其他选项可用。