Heim > Java > javaLernprogramm > Detaillierte Erläuterung der Lese- und Schreibindexbeispiele basierend auf StandardAnalyzer

Detaillierte Erläuterung der Lese- und Schreibindexbeispiele basierend auf StandardAnalyzer

零下一度
Freigeben: 2017-06-25 10:45:05
Original
1557 Leute haben es durchsucht

前言

      使用lucene创建索引时如果指定了解析器,则需要读写都使用这个解析器,目前我发现也就是在处理中文这块比较麻烦,像你在使用solr时如果配置了ik分词,则需要把index清空重新创建才能继续搜索。

      本篇引用lucene-6.4.0和4.x的几个关键类会有不同的地方。

 

创建索引

 1  public void index(){ 2  3         Directory dir=null; 4         Analyzer analyzer=null; 5         IndexWriterConfig config=null; 6         IndexWriter indexWriter=null; 7         try{ 8             /** 9              * SimpleFSDirectory 不能很好支持多线程操作10              * **/11             dir =new SimpleFSDirectory(Paths.get(INDEX_URL));12 13             analyzer=new StandardAnalyzer();14             config =new IndexWriterConfig(analyzer);15             /**16              * IndexWriter(Directory d,IndexWriterConfig config)17              * **/18             indexWriter =new IndexWriter(dir,config);19 20             indexWriter.deleteAll();21             List<UploadBook> books =bookDao.listAllBooks();22             Document document=null;23 24             SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");25 26             for(UploadBook book:books){27                 document=new Document();28                 document.add(new Field("id",book.getId().toString(), TextField.TYPE_STORED));29                 document.add(new Field("ip",book.getIp(), TextField.TYPE_STORED));30                 document.add(new Field("title",book.getOriginFileName(), TextField.TYPE_STORED));31 32                 document.add(new Field("content", PdfReader.read(INDEX_PDF+book.getNewFileName()),TextField.TYPE_STORED));33                 document.add(new Field("createtime",formatter.format(book.getCreateTime()), TextField.TYPE_STORED));34 35                 indexWriter.addDocument(document);36             }37 38             indexWriter.commit();39 40             System.out.println("======索引创建完成,公创建"+books.size()+"条索引========");41         }catch (IOException ex){42             ex.printStackTrace();43         }44         catch(Exception ex){45             ex.printStackTrace();46         }finally {47             if(indexWriter !=null){48                 try{49                     indexWriter.close();50                 }catch (IOException ex){51                     System.out.println("======indexWriter close exception========");52                 }53             }54         }55 56     }
Nach dem Login kopieren

 

读取索引

 1  public static List<Book> search2(String kw){ 2         Directory dir=null; 3         Analyzer analyzer=null; 4         List<Book> list = new ArrayList<Book>(); 5         try{ 6             dir= FSDirectory.open(Paths.get("e:\\soso\\index")); 7             analyzer=new StandardAnalyzer(); 8  9             DirectoryReader reader =DirectoryReader.open(dir);10             IndexSearcher searcher=new IndexSearcher(reader);11 12             QueryParser parser=new QueryParser("content",analyzer);13             Query query =parser.parse(kw);14 15             ScoreDoc[] docs=searcher.search(query,100).scoreDocs;16 17             for (int i = 0; i < docs.length; i++) {18                 Document firstHit = searcher.doc(docs[i].doc);19 20                 Book book=new Book();21                 book.setId(Integer.parseInt(firstHit.getField("id").stringValue()));22                 book.setIp(firstHit.getField("ip").stringValue());23 24                 String title=firstHit.getField("title").stringValue();25                 title=title.substring(0,title.lastIndexOf("."));26                 book.setTitle(title);27 28                 String content=firstHit.getField("content").stringValue();29                 if(content.length()>=500){30                     content=content.substring(0,500)+"......";31                 }32                 book.setContent(content);33 34                 SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-mm");35                 Date date =format.parse(firstHit.getField("createtime").stringValue());36                 book.setCreateTime(format.format(date));37 38                 list.add(book);39 40             }41 42         }catch(Exception ex){43 44         }finally {45             try{46                 dir.close();47 48             }catch(IOException ex){49                 ex.printStackTrace();50             }51         }52 53         return list;54     }
Nach dem Login kopieren

 

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Lese- und Schreibindexbeispiele basierend auf StandardAnalyzer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage