日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章。轉載請注明來自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/30035025


在Lucene對文本進行處理的過程中,能夠大致分為三大部分:

1、索引文件:提取文檔內容并分析,生成索引

2、搜索內容:搜索索引內容,依據搜索keyword得出搜索結果

3、分析內容:對搜索詞匯進行分析,生成Quey對象。


注:其實。除了最主要的全然匹配搜索以外。其他都須要在搜索前進行分析。

如不加分析步驟。則搜索JAVA。是沒有結果的,由于在索引過程中已經將詞匯均轉化為小寫。而此處搜索時則要求keyword全然匹配。

使用了QueryParser類以后,則依據Analyzer的詳細實現類,對搜索詞匯進行分析,如大寫和小寫轉換,java and ant等的搜索詞解釋等。


一、索引文件

基本過程例如以下:

1、創建索引庫IndexWriter

2、依據文件創建文檔Document

?3、向索引庫中寫入文檔內容

package com.ljh.search.index;import java.io.File; import java.io.FileReader; import java.io.IOException;import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.LongField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version;// 1、創建索引庫IndexWriter // 2、依據文件創建文檔Document // 3、向索引庫中寫入文檔內容public class IndexFiles {public static void main(String[] args) throws IOException {String usage = "java IndexFiles"+ " [-index INDEX_PATH] [-docs DOCS_PATH] \n\n"+ "This indexes the documents in DOCS_PATH, creating a Lucene index"+ "in INDEX_PATH that can be searched with SearchFiles";String indexPath = null;String docsPath = null;for (int i = 0; i < args.length; i++) {if ("-index".equals(args[i])) {indexPath = args[i + 1];i++;} else if ("-docs".equals(args[i])) {docsPath = args[i + 1];i++;}}if (docsPath == null) {System.err.println("Usage: " + usage);System.exit(1);}final File docDir = new File(docsPath);if (!docDir.exists() || !docDir.canRead()) {System.out.println("Document directory '"+ docDir.getAbsolutePath()+ "' does not exist or is not readable, please check the path");System.exit(1);}IndexWriter writer = null;try {// 1、創建索引庫IndexWriterwriter = getIndexWriter(indexPath);index(writer, docDir);} catch (IOException e) {e.printStackTrace();} finally {writer.close();}}private static IndexWriter getIndexWriter(String indexPath)throws IOException {Directory indexDir = FSDirectory.open(new File(indexPath));IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_48,new StandardAnalyzer(Version.LUCENE_48));IndexWriter writer = new IndexWriter(indexDir, iwc);return writer;}private static void index(IndexWriter writer, File file) throws IOException {if (file.isDirectory()) {String[] files = file.list();if (files != null) {for (int i = 0; i < files.length; i++) {index(writer, new File(file, files[i]));}}} else {// 2、依據文件創建文檔DocumentDocument doc = new Document();Field pathField = new StringField("path", file.getPath(),Field.Store.YES);doc.add(pathField);doc.add(new LongField("modified", file.lastModified(),Field.Store.NO));doc.add(new TextField("contents", new FileReader(file)));System.out.println("Indexing " + file.getName());// 3、向索引庫中寫入文檔內容writer.addDocument(doc);}}}

(1)使用“java indexfiles -index d:/index -docs d:/tmp”執行程序,索引d:/tmp中的文件。并將索引文件放置到d:/index。

(2)上述生成的索引文件能夠使用Luke進行查看。眼下Luke已遷移至github進行托管。


二、搜索文件

1、打開索引庫IndexSearcher
2、依據關鍵詞進行搜索
3、遍歷結果并處理

package com.ljh.search.search;//1、打開索引庫IndexSearcher //2、依據關鍵詞進行搜索 //3、遍歷結果并處理 import java.io.File; import java.io.IOException;import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory;public class Searcher {public static void main(String[] args) throws IOException {String indexPath = null;String term = null;for (int i = 0; i < args.length; i++) {if ("-index".equals(args[i])) {indexPath = args[i + 1];i++;} else if ("-term".equals(args[i])) {term = args[i + 1];i++;}}System.out.println("Searching " + term + " in " + indexPath);// 1、打開索引庫Directory indexDir = FSDirectory.open(new File(indexPath));IndexReader ir = DirectoryReader.open(indexDir);IndexSearcher searcher = new IndexSearcher(ir);// 2、依據關鍵詞進行搜索TopDocs docs = searcher.search(new TermQuery(new Term("contents", term)), 20);// 3、遍歷結果并處理ScoreDoc[] hits = docs.scoreDocs;System.out.println(hits.length);for (ScoreDoc hit : hits) {System.out.println("doc: " + hit.doc + " score: " + hit.score);}ir.close();}}

三、分析

其實。除了最主要的全然匹配搜索以外,其他都須要在搜索前進行分析。

如不加分析步驟。則搜索JAVA。是沒有結果的,由于在索引過程中已經將詞匯均轉化為小寫。而此處搜索時則要求keyword全然匹配。

使用了QueryParser類以后,則依據Analyzer的詳細實現類,對搜索詞匯進行分析,如大寫和小寫轉換,java and ant等的搜索詞解釋等。

分析過程有2個基本步驟:

1、生成QueryParser對象

2、調用QueryParser.parse()生成Query()對象。

詳細代碼,將下述代碼:

// 2、依據關鍵詞進行搜索TopDocs docs = searcher.search(new TermQuery(new Term("contents", term)), 20);用下面取代:

// 2、依據關鍵詞進行搜索/*TopDocs docs = searcher.search(new TermQuery(new Term("contents", term)), 10);*/QueryParser parser = new QueryParser(Version.LUCENE_48, "contents", new SimpleAnalyzer(Version.LUCENE_48));Query query = null;try {query = parser.parse(term);} catch (ParseException e) {e.printStackTrace();}TopDocs docs = searcher.search(query, 30);


轉載于:https://www.cnblogs.com/mqxnongmin/p/10472754.html

總結

以上是生活随笔為你收集整理的【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。