⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookslikethis.java

📁 LuceneInAction配套源码,LuceneInAction是对lucene api的详细讲解及具体应用.此源码即应用例子
💻 JAVA
字号:
package lia.advsearching;import org.apache.lucene.document.Document;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.Term;import org.apache.lucene.index.TermFreqVector;import org.apache.lucene.search.BooleanQuery;import org.apache.lucene.search.Hits;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.TermQuery;import org.apache.lucene.store.FSDirectory;import java.io.IOException;public class BooksLikeThis {  public static void main(String[] args) throws IOException {    String indexDir = System.getProperty("index.dir");    FSDirectory directory =        FSDirectory.getDirectory(indexDir, false);    IndexReader reader = IndexReader.open(directory);    int numDocs = reader.maxDoc();    BooksLikeThis blt = new BooksLikeThis(reader);    for (int i = 0; i < numDocs; i++) {      System.out.println();      Document doc = reader.document(i);      System.out.println(doc.get("title"));      Document[] docs = blt.docsLike(i, 10);      if (docs.length == 0) {        System.out.println("  None like this");      }      for (int j = 0; j < docs.length; j++) {        Document likeThisDoc = docs[j];        System.out.println("  -> " + likeThisDoc.get("title"));      }    }  }  private IndexReader reader;  private IndexSearcher searcher;  public BooksLikeThis(IndexReader reader) {    this.reader = reader;    searcher = new IndexSearcher(reader);  }  public Document[] docsLike(int id, int max) throws IOException {    Document doc = reader.document(id);    String[] authors = doc.getValues("author");    BooleanQuery authorQuery = new BooleanQuery();    for (int i = 0; i < authors.length; i++) {      String author = authors[i];      authorQuery.add(new TermQuery(new Term("author", author)),          false, false);    }    authorQuery.setBoost(2.0f);    TermFreqVector vector =        reader.getTermFreqVector(id, "subject");    BooleanQuery subjectQuery = new BooleanQuery();    for (int j = 0; j < vector.size(); j++) {      TermQuery tq = new TermQuery(          new Term("subject", vector.getTerms()[j]));      subjectQuery.add(tq, false, false);    }    BooleanQuery likeThisQuery = new BooleanQuery();    likeThisQuery.add(authorQuery, false, false);    likeThisQuery.add(subjectQuery, false, false);    // exclude myself    likeThisQuery.add(new TermQuery(        new Term("isbn", doc.get("isbn"))), false, true);    System.out.println("  Query: " +        likeThisQuery.toString("contents"));    Hits hits = searcher.search(likeThisQuery);    int size = max;    if (max > hits.length()) size = hits.length();    Document[] docs = new Document[size];    for (int i = 0; i < size; i++) {      docs[i] = hits.doc(i);    }    return docs;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -