當前位置:首頁 » 操作系統 » lucene資料庫

lucene資料庫

發布時間: 2022-05-31 02:45:08

Ⅰ 在使用Lucene工具包後還需要資料庫

當然需要資料庫了。你資料庫是存放你的數據。而Lucene只是按照他的切割方法把數據弄成index和key,這樣方便搜索,避免復雜的資料庫查詢。

Ⅱ 如何用Lucene搜索資料庫里的內容

首先,應該知道lucene檢索的是索引文件,而索引文件則是依據於資料庫創建而成的。那麼問題來了,你想怎麼去創建索引呢? 一般來說,這個得看需求了,最主要是考慮對數據的實時性要求高不高、數據量大不大?額,就假設數據量比較大吧,畢竟數據量.

Ⅲ 精確查詢時資料庫與lucene索引效率哪個高

這個對比的意義不是特別大,因為應用的場景不一樣。比如說:

  1. 資料庫單節點部署,不做分庫分表,不做集群,為查詢欄位建立索引。此時lucene和資料庫效率差距不大。但數據越多,lucene的優勢就更明顯。

  2. 資料庫分庫分表,建立索引。足夠的優化之後,在精確查詢的情況下,兩者依然可以保持在毫秒級的查詢效率。比如某寶,優化後的mysql並不比lucene慢。

  3. 要不要分頁。由於lucene是把所有的相關信息查出來,放入內存,然後再進行分頁的,所以,當數據量較大的情況下,資料庫的分頁效率會更高。

總結來說,lucene是做全文索引的,如果完全的精確查詢,資料庫就能滿足要求。並且資料庫的存入效率更高。

Ⅳ 如何用java的lucene對資料庫進行全文檢索

lucene是一個公用的全文索引組件,它的目標是把各種各樣格式的數據轉化成lucene特有的索引文件格式,這樣才能通過lucene的高速檢索機制進行全文檢索。

你的數據來源可以是關系資料庫,可以是word、execl、txt文檔,可以是html網頁,對於這些數據源,你必須將它們內部的數據讀取出來,並封裝成lucene的document實例,之後讓lucene幫你構建索引。

舉個例子:你的有一個用戶資料庫,裡面存儲了幾十萬的用戶信息,你現在要對這個資料庫進行全文索引,那麼你要做的事情是:

1.寫一段傳統的JDBC程序,講每條的用戶信息從資料庫讀取出來
2.針對每條用戶記錄,建立一個lucene document
Document doc = new Document();
並根據你的需要,將用戶信息的各個欄位對應luncene document中的field 進行添加,如:
doc.add(new Field("NAME","USERNAME", Field.Store.YES,Field.Index.UN_TOKENIZED));
然後將該條doc加入到索引中, 如: luceneWriter.addDocument(doc);
這樣就建立了lucene的索引庫
3.編寫對索引庫的搜索程序(看lucene文檔),通過對lucene的索引庫的查找,你可以快速找到對應記錄的ID
4.通過ID到資料庫中查找相關記錄

上面闡述了lucene的大體用法,不知道是不是說的很清楚。

Ⅳ lucene根據資料庫記錄id刪除索引無效

看一下是不是建索引的問題(Field選取的不對,一般id欄位用Field.Index.NOT_ANALYZED),

我用lucene 3.6.2, IKAnalyzer2012_u6.jar測試的


importjava.io.File;
importorg.apache.lucene.analysis.Analyzer;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.document.Field;
importorg.apache.lucene.index.IndexReader;
importorg.apache.lucene.index.IndexWriter;
importorg.apache.lucene.index.IndexWriterConfig;
importorg.apache.lucene.queryParser.MultiFieldQueryParser;
importorg.apache.lucene.search.IndexSearcher;
importorg.apache.lucene.search.Query;
importorg.apache.lucene.store.Directory;
importorg.apache.lucene.store.FSDirectory;
importorg.apache.lucene.util.Version;
importorg.wltea.analyzer.lucene.IKAnalyzer;
publicclassLucenDemo{
publicstaticvoidmain(String[]args){
Stringid="456";
createIndex();
printTotalHits(id);
deleteById(id);
printTotalHits(id);
}
staticStringindexPath="E:\lucene-demo-index\";
(Stringid){
try{
Analyzeranal=newIKAnalyzer(true);
MultiFieldQueryParserparser=newMultiFieldQueryParser(Version.LUCENE_36,newString[]{"id"},anal);
Queryquery=parser.parse(id);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexReaderindexReader=IndexReader.open(dir);

IndexSearchersearcher=newIndexSearcher(indexReader);

System.out.println(searcher.search(query,10).totalHits);

indexReader.close();

}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoiddeleteById(Stringid){
try{
Analyzeranal=newIKAnalyzer(true);
MultiFieldQueryParserparser=newMultiFieldQueryParser(Version.LUCENE_36,newString[]{"id"},anal);
Queryquery=parser.parse(id);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexWriterConfigconfig=newIndexWriterConfig(Version.LUCENE_36,anal);
IndexWriterindexWriter=newIndexWriter(dir,config);
indexWriter.deleteDocuments(query);
indexWriter.commit();
indexWriter.close();
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidcreateIndex(){
try{
Analyzeranalyzer=newIKAnalyzer(true);

Directorydir=FSDirectory.open(newFile(indexPath));
IndexWriterConfigconfig=newIndexWriterConfig(Version.LUCENE_36,analyzer);
IndexWriterindexWriter=newIndexWriter(dir,config);

Documentdoc1=newDocument();
doc1.add(newField("id",false,"123",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc1);

Documentdoc2=newDocument();
doc2.add(newField("id",false,"456",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc2);

Documentdoc3=newDocument();
doc3.add(newField("id",false,"789",Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO));
indexWriter.addDocument(doc3);

indexWriter.commit();
indexWriter.close();
}catch(Exceptione){
e.printStackTrace();
}
}
}

Ⅵ 如何用Lucene索引資料庫

Lucene一個常見的用例是在一個或者多個資料庫表進行全文檢索。 雖然MySql有全文檢索的功能,但是如果欄位和數據量增加,MySql的性能會減低很快。
映射數據到Lucene
用偽代碼表示:
String sql = 「select id, firstname, lastname, phone, email from person」;
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
Document doc = new Document();
doc.add(new Field(」id」, rs,getString(」firstname」), Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field(」firstname」, rs,getString(」firstname」), Field.Store.YES, Field.Index.TOKENIZED));
// … repeat for each column in result set
writer.addDocument(doc);}
顯示搜索結果
當顯示搜索結果給用戶時,你有兩個選擇:
1.因為你的Table已經扁平化到了Lucene裡面,所以只需要用Document裡面的Field.因為Lucene也非常快,這樣會大大減低你的資料庫的壓力。
2.如果你要顯示另外的數據到你的搜索結果頁,你只需要在Hits裡面收集他們的ID,然後從資料庫去數據再根據結果組裝搜索結果頁。
要搜索的東西
以上列出的方式都是假設把整個結果集放到內存裡面,這樣在數據集大的話會很容易造成問題,你需要在你的SQL裡面做一些分頁或者offset
你還需要在你的結果集裡面做一個try/catch,這樣當添加一個Document出錯的時候不會影響整個過程。
通常情況下可以把所有的field放到同一個」Contents」 field然後只搜索這一個欄位,但是需要保留這些field這樣可以按field檢索。
如果你需要檢索多個table
通常最好能用不同的索引來搜索不同類型的數據,而不是把他們加到同一個index然後根據類型來區分。原因:
可以更簡單的維護操作。

Ⅶ 想請問一下資料庫索引和lucene索引究竟是個什麼東西二者有什麼區別沒有

資料庫索引是根據欄位的,
lucene是對文章全文進行檢索,一般都是對文章切分出一個個的詞,對詞建索引,搜索時匹配上詞的文章按相關度進行排序

Ⅷ 如何使用lucene改造oracle資料庫

Lucene一個常見的用例是在一個或者多個資料庫表進行全文檢索。 雖然MySql有全文檢索的功能,但是如果欄位和數據量增加,MySql的性能會減低很快。映射數據到Lucene用偽代碼表示:String sql = 「select id, firstname, lastname, phone, email fro...

Ⅸ Lucene如何搜索資料庫數據呢

首先,應該知道lucene檢索的是索引文件,而索引文件則是依據於資料庫創建而成的。那麼問題來了,你想怎麼去創建索引呢?
一般來說,這個得看需求了,最主要是考慮對數據的實時性要求高不高、數據量大不大?額,就假設數據量比較大吧,畢竟數據量太小也沒必要使用lucene。
1、數據實時性要求不高。可定時增量更新索引,以天或幾個小時為單位。
2.數據實時性要求較高。可在數據入庫時,立即進行索引更新操作。那麼問題又來了數據量比較大的時候,更新一次索引是比較慢的。所以,還得繼續考慮緩存策略問題,將新增數據保存在緩存中,選擇合適的時間進行提交。

Ⅹ Lucene怎麼查詢資料庫里的數據渲染頁面

你說的是查詢關鍵字之後高亮顯示吧。
一般要建立自己的索引,不是連接資料庫。
然後檢索關鍵字,
你可以找一下高亮插件
然後把結果顯示出來。
祝好運,望採納。

熱點內容
ps存儲不了怎麼辦 發布:2024-10-29 07:15:47 瀏覽:356
對數減法運演算法則 發布:2024-10-29 06:59:11 瀏覽:50
五萬多帝豪什麼配置 發布:2024-10-29 06:57:04 瀏覽:527
工藝員編程 發布:2024-10-29 06:31:06 瀏覽:113
大嘴腳本是什麼 發布:2024-10-29 06:20:59 瀏覽:205
電腦批量壓縮圖片軟體 發布:2024-10-29 06:14:39 瀏覽:720
php郵件內容 發布:2024-10-29 06:14:33 瀏覽:836
偽裝者緩存 發布:2024-10-29 06:12:19 瀏覽:787
原神怎麼調低手機配置 發布:2024-10-29 06:12:01 瀏覽:1001
安卓怎麼安裝starwalk 發布:2024-10-29 05:49:20 瀏覽:832