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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Lucene –快速添加索引和搜索功能

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucene –快速添加索引和搜索功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是Lucene?

Apache LuceneTM是完全用Java編寫的高性能,功能齊全的文本搜索引擎庫。 它是一項適用于幾乎所有需要全文搜索的應用程序的技術,尤其是跨平臺的應用程序。

Lucene可以純文本,整數,索引PDF,Office文檔。 等等。,

Lucene如何啟用更快的搜索?

Lucence創建了一個稱為倒排索引的東西。 通常我們在文檔中映射文檔->術語。 但是,Lucene則相反。 創建索引詞->包含該詞的文檔列表,這使搜索速度更快。

安裝Lucene

Maven依賴

<pre class='brush:xml'><dependency><groupid>org.apache.lucene</groupid><artifactid>lucene-core</artifactid><version>3.0.2</version><type>jar</type><scope>compile</scope> </dependency>

下載依賴

從http://lucene.apache.org/下載Lucene,并在類路徑中添加lucene-core.jar。

Lucene如何工作?


首先讓我們從底部開始了解圖片-中心。 原始文本用于創建Lucene“文檔”,使用指定的分析器對其進行分析,然后根據字段的Store,TermVector和Analzed屬性將文檔添加到索引中。

接下來,從上到下搜索。 用戶以文本格式指定查詢。 查詢對象是基于查詢文本構建的,執行查詢的結果作為TopDocs返回。

Lucene核心課程

目錄,FSDirectory,RAMDirectory 包含索引的目錄

基于文件系統的索引目錄

基于內存的索引目錄

目錄

indexDirectory = FSDirectory.open(新文件('c:// lucene // nodes'));

索引作家 處理寫入索引– addDocument,updateDocument,deleteDocuments,merge等 IndexWriter writer =新的IndexWriter(indexDirectory,

新的StandardAnalyzer(Version.LUCENE_30),

新的MaxFieldLength(1010101));

IndexSearcher 使用indexReader進行搜索-搜索(查詢,整型) IndexSearcher searcher =新的IndexSearcher(indexDirectory);
文獻 DTO用于索引和搜索 Document document = new Document();
領域 每個文檔包含多個字段。 有2部分,名稱,值。 新字段('id','1',Store.YES,Index.NOT_ANALYZED)
術語 測試一個字。 用于search.2零件。要搜索的字段和要搜索的值 條款term = new Term('id','1');
詢問 所有查詢類型的基礎-TermQuery,BooleanQuery,PrefixQuery,RangeQuery,WildcardQuery,PhraseQuery等。 查詢查詢=新的TermQuery(term);
分析儀 從文本構建令牌,并幫助從文本構建索引詞 新的StandardAnalyzer()

Lucene目錄

目錄–是Lucene在其上運行的數據空間。 它可以是文件系統或內存。

以下是常用的目錄

目錄 描述
FS目錄 基于文件系統的目錄 目錄= FSDirectory.open(文件文件);
//文件->目錄路徑
RAM目錄 基于內存的Lucene目錄 目錄=新的MemoryDirectory()

Directory = new MemoryDirectory(Directory dir)//將基于文件的目錄加載到內存


創建索引條目

Lucene的“文檔”對象是索引中使用的主要對象。 文檔包含多個字段。 分析器在文檔字段上進行工作,以將其分解為令牌,然后使用索引編寫器寫入目錄。

索引作家

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true, MaxFieldLength.UNLIMITED);

分析儀

將文本分析為要搜索的標記或關鍵字的工作。 Lucene提供的默認分析器很少。 分析器的選擇定義了如何對索引文本進行標記和搜索。

以下是一些標準分析儀。

示例–分析器如何處理示例文本

定義字段索引的屬性

  • 存儲–是否應存儲該字段以便將來檢索
  • 分析–應將內容拆分為令牌
  • TermVECTOR –是否存儲基于術語的詳細信息


店鋪:

是否應將該字段存儲起來以便以后撤退

是的 存儲值,以后可以從索引中檢索
商店編號 不要儲存。 與Index.ANALYZED一起使用。 當令牌僅用于搜索時


分析:

如何分析文字

索引分析 將文本分解為標記,對每個標記編制索引以使其可搜索
索引。NOT_ANALYZED 將整個文本作為單個標記編制索引,但不要進行分析(拆分)
Index.ANALYZED_NO_NORMS 與ANALYZED相同,但不存儲規范
索引:NOT_ANALYZED_NO_NORMS 與NOT_ANALYZED相同,但沒有規范
索引號
使此字段完全可搜索


詞向量

相似,突出顯示等需要術語詳細信息

TermVector.YES 記錄
每個文檔中的唯一條款+計數+無位置+無偏移
TermVector.WITH_POSITIONS 記錄
每個文檔中的唯一條款+計數+位置+無偏移
TermVector.WITH_OFFSETS 記錄
每個文檔中的唯一條款+計數+無位置+抵消
TermVector.WITH_POSITIONS_OFFSETS 記錄
每個文檔中的唯一條款+計數+位置+偏移
TermVector.NO 不要記錄術語向量信息

創建索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document(); document.add(new Field('id', '1', Store.YES, Index.NOT_ANALYZED)); document.add(new Field('name', 'user1', Store.YES, Index.NOT_ANALYZED)); document.add(new Field('age', '20', Store.YES, Index.NOT_ANALYZED)); writer.addDocument(document);

更新索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document(); document.add(new Field("id", "1", Store.YES, Index.NOT_ANALYZED)); document.add(new Field("name", "user1", Store.YES, Index.NOT_ANALYZED)); document.add(new Field("age", "20", Store.YES, Index.NOT_ANALYZED)); writer.addDocument(document);

刪除索引的例子

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), MaxFieldLength.UNLIMITED);Term term = new Term('id', '1'); writer.deleteDocuments(term);

搜索索引: 用戶以文本格式指定查詢。 根據查詢文本構建查詢對象,對其進行分析,然后將執行的查詢結果作為TopDocs返回。
查詢是搜索的主要輸入。

術語查詢
布爾查詢 是否(合并多個查詢)

前綴查詢 以。。開始
通配符查詢 ? 和*
– *開頭不允許
詞組查詢 精確短語
范圍查詢 術語范圍或數字范圍
模糊查詢 相似詞搜索

樣本查詢

搜索示例:

IndexSearcher searcher = new IndexSearcher(indexDirectory); Term term = new Term('id', '1'); Query query = new TermQuery(term); TopDocs docs = searcher.search(query, 3); for (int i = 1; i <= docs.totalHits; i++) {System.out.println(searcher.doc(i)); }

Lucene診斷工具:

  • 盧克– http://code.google.com/p/luke/
    Luke是一個方便的開發和診斷工具,它可以訪問現有的Lucene索引,并允許您以幾種方式顯示和修改其內容:
  • 豪華轎車– http://limo.sourceforge.net/
    這個想法是要有一個小的工具作為Web應用程序運行,它提供有關Lucene搜索引擎使用的索引的基本信息。

完整的例子:

在這里下載: LuceneTester.java

資源資源

  • http://lucene.apache.org/core/
  • http://www.amazon.com/Lucene-Action-Second-Edition-Covers/dp/1933988177/ref=dp_ob_title_bk

參考: Lucene –在Techie博客的Thoughts中,從我們的JCG合作伙伴 Srividhya Umashanker 快速添加了索引和搜索功能 。

翻譯自: https://www.javacodegeeks.com/2012/12/lucene-quickly-add-index-and-search-capability.html

總結

以上是生活随笔為你收集整理的Lucene –快速添加索引和搜索功能的全部內容,希望文章能夠幫你解決所遇到的問題。

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