BoostFieldQuery.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:4k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter7;
  2. import java.io.IOException;
  3. import org.apache.lucene.analysis.standard.StandardAnalyzer;
  4. import org.apache.lucene.document.Document;
  5. import org.apache.lucene.document.Field;
  6. import org.apache.lucene.index.IndexWriter;
  7. import org.apache.lucene.queryParser.ParseException;
  8. import org.apache.lucene.queryParser.QueryParser;
  9. import org.apache.lucene.search.Hits;
  10. import org.apache.lucene.search.IndexSearcher;
  11. import org.apache.lucene.search.Query;
  12. import org.apache.lucene.store.RAMDirectory;
  13. public class BoostFieldQuery {
  14. static String[] ContentList = { "Lucene 使用 方便", "Lucene 功能 强大", "Lucene 开放 源码" };
  15. static String[] NumberList = { "No.1", "No.2", "No.3"};
  16. public static void main(String[] args) throws IOException{
  17. searchIndex();
  18. }
  19. // 创建索引并修改boost值,改变检索结果排序
  20. private static void searchIndex() throws IOException{   
  21. try{
  22. RAMDirectory ramdirectory = new RAMDirectory(); // 内存目录
  23. IndexWriter writer = new IndexWriter(ramdirectory,new StandardAnalyzer(),true);
  24. for (int i = 0; i < ContentList.length; i++)
  25.     {
  26.         Document document = new Document();     // 创建文档对象
  27.         // 创建域对象
  28.         Field fieldContent1 = new Field("Content1", ContentList[i], Field.Store.YES, Field.Index.TOKENIZED);
  29.         Field fieldContent2 = new Field("Content2", ContentList[i], Field.Store.YES, Field.Index.TOKENIZED);
  30.         Field fieldNumber   = new Field("Number", NumberList[i], Field.Store.YES, Field.Index.TOKENIZED);
  31.         fieldContent1.setBoost((i+1)*2); // 不同域上指定不同Boost值
  32.         fieldContent2.setBoost(1.0f/(i+1));
  33.         
  34.         document.add(fieldContent1);            // 添加创建的文本域到当前文档
  35.         document.add(fieldContent2);            // 添加创建的内容相同文本域到当前文档
  36.         document.add(fieldNumber);
  37.         writer.addDocument(document);           // 完成的文档添加到索引
  38.     }
  39. writer.close();                             // 关闭索引
  40. IndexSearcher searcher = new IndexSearcher(ramdirectory);                  // 创建检索器
  41. System.out.println("Lucene Search Content1");
  42. System.out.println("-------------------------------------------");
  43. QueryParser parser1 = new QueryParser("Content1",new StandardAnalyzer());  // 创建查询分析器
  44.     Query  query1 = parser1.parse("Lucene");    // 生成查询对象
  45.     Hits rstDoc1 = searcher.search(query1);     // 检索结果保存Hits集合
  46.     for (int i = 0; i < rstDoc1.length(); i++)  // 遍历获取文档,并读取相关参数
  47.     {
  48.         Document doc = rstDoc1.doc(i);
  49.         System.out.println(doc.get("Number") + " " + doc.get("Content1") + " Boost: " + doc.getBoost() + ", score : " + rstDoc1.score(i));
  50.     }
  51.     System.out.println("");
  52. System.out.println("Lucene Search Content2");
  53. System.out.println("-------------------------------------------");
  54. QueryParser parser2 = new QueryParser("Content2",new StandardAnalyzer());  // 创建查询分析器
  55.     Query  query2 = parser2.parse("Lucene");    // 生成查询对象
  56.     Hits rstDoc2 = searcher.search(query2);     // 检索结果保存Hits集合
  57.     for (int i = 0; i < rstDoc2.length(); i++)  // 遍历获取文档,并读取相关参数
  58.     {
  59.         Document doc = rstDoc2.doc(i);
  60.         System.out.println(doc.get("Number") + " " + doc.get("Content2") + " Boost: " + doc.getBoost() + ", score : " + rstDoc2.score(i));
  61.     }
  62.     searcher.close();     
  63. } catch(ParseException e){
  64. System.out.println("ParseException ");
  65. } catch(IOException e){
  66. System.out.println("IOException  ");
  67. }
  68. }
  69. }