摘要:序說是界的檢索之王,當之無愧。近年來的火爆登場,包括之前的及,其底層都是。簡單了解,對使用還是有點幫助的。是當前最流行的開源大數據內存計算框架,采用語言實現,由伯克利大學實驗室開發并于年開源。
序
說lucene是Java界的檢索之王,當之無愧。近年來elasticsearch的火爆登場,包括之前的solr及solr cloud,其底層都是lucene。簡單了解lucene,對使用elasticsearch還是有點幫助的。本文就簡單過一下其簡單的api使用。
添加依賴索引與檢索 創建索引org.apache.lucene lucene-core 4.6.1 org.apache.lucene lucene-analyzers-common 4.6.1 org.apache.lucene lucene-queryparser 4.6.1 org.apache.lucene lucene-codecs 4.6.1
File indexDir = new File(this.getClass().getClassLoader().getResource("").getFile()); @Test public void createIndex() throws IOException { // Directory index = new RAMDirectory(); Directory index = FSDirectory.open(indexDir); // 0. Specify the analyzer for tokenizing text. // The same analyzer should be used for indexing and searching StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_46); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46, analyzer); // 1. create the index IndexWriter w = new IndexWriter(index, config); addDoc(w, "Lucene in Action", "193398817"); addDoc(w, "Lucene for Dummies", "55320055Z"); addDoc(w, "Managing Gigabytes", "55063554A"); addDoc(w, "The Art of Computer Science", "9900333X"); w.close(); } private void addDoc(IndexWriter w, String title, String isbn) throws IOException { Document doc = new Document(); doc.add(new TextField("title", title, Field.Store.YES)); // use a string field for isbn because we don"t want it tokenized doc.add(new StringField("isbn", isbn, Field.Store.YES)); w.addDocument(doc); }檢索
@Test public void search() throws IOException { // 2. query String querystr = "lucene"; // the "title" arg specifies the default field to use // when no field is explicitly specified in the query. Query q = null; try { StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_46); q = new QueryParser(Version.LUCENE_46,"title", analyzer).parse(querystr); } catch (Exception e) { e.printStackTrace(); } // 3. search int hitsPerPage = 10; Directory index = FSDirectory.open(indexDir); IndexReader reader = DirectoryReader.open(index); IndexSearcher searcher = new IndexSearcher(reader); TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true); searcher.search(q, collector); ScoreDoc[] hits = collector.topDocs().scoreDocs; // 4. display results System.out.println("Found " + hits.length + " hits."); for (int i = 0; i < hits.length; ++i) { int docId = hits[i].doc; Document d = searcher.doc(docId); System.out.println((i + 1) + ". " + d.get("isbn") + " " + d.get("title")); } // reader can only be closed when there // is no need to access the documents any more. reader.close(); }分詞
對于搜索來說,分詞出現在兩個地方,一個是對用戶輸入的關鍵詞進行分詞,另一個是在索引文檔時對文檔內容的分詞。兩個分詞最好一樣,這樣才可以更好地匹配出來。
@Test public void cutWords() throws IOException { // StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_46); // CJKAnalyzer analyzer = new CJKAnalyzer(Version.LUCENE_46); SimpleAnalyzer analyzer = new SimpleAnalyzer(); String text = "Spark是當前最流行的開源大數據內存計算框架,采用Scala語言實現,由UC伯克利大學AMPLab實驗室開發并于2010年開源。"; TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(text)); CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class); try { tokenStream.reset(); while (tokenStream.incrementToken()) { System.out.println(charTermAttribute.toString()); } tokenStream.end(); } finally { tokenStream.close(); analyzer.close(); } }
輸出
spark 是 當前 最 流行 的 開源 大數 據 內存 計算 框架 采用 scala 語言 實現 由 uc 伯克利 大學 amplab 實驗室 開發 并于 2010 年 開源
參考本工程github
lucenetutorial
helloLucene
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65464.html
摘要:系列文章系列一快速入門系列二使用及索引文檔的基本操作系列三查詢及高亮是什么在維基百科的定義是一套用于全文檢索和搜索的開放源代碼程序庫,由軟件基金會支持和提供。全面準確和快速是衡量全文檢索系統的關鍵指標。結果列表有相關度排序。 系列文章: Lucene系列(一)快速入門 Lucene系列(二)luke使用及索引文檔的基本操作 Lucene系列(三)查詢及高亮 Lucene是什么? Luc...
摘要:系列文章系列一快速入門系列二使用及索引文檔的基本操作系列三查詢及高亮入門簡介地址下載地址是一個用于搜索引擎的,方便開發和診斷的可視化工具。使用作為其最低級別的搜索引擎基礎。截止,上述代碼所用的包皆為最新。 系列文章: Lucene系列(一)快速入門 Lucene系列(二)luke使用及索引文檔的基本操作 Lucene系列(三)查詢及高亮 luke入門 簡介: github地址:http...
摘要:因為倒排索引打分機制全文檢索原理分詞原理等等,這些都是不會過時的技術。中,單個倒排索引文件稱為。其中有一個文件,記錄了所有的信息,稱為文檔新寫入時,會生成新的。過程上個過程中在文件系統緩存中,會有意外故障文檔丟失。寫入次怕后,清空。 前言 最近 TL 分享了下 《Elasticsearch基礎整理》,蹭著這個機會。寫個小文鞏固下,本文主要講 ES -> Lucene的底層結構,然后詳細...
摘要:極速的查詢速度通過有限狀態轉換器實現了用于全文檢索的倒排索引,實現了用于存儲數值數據和地理位置數據的樹,以及用于分析的列存儲。每個數據都被編入了索引。強大的彈性保障硬件故障。檢測這些故障并確保集群和數據的安全性和可用性。 What —— Elasticsearch是什么? Elasticsearch是一個基于Lucene的搜索服務器,Elasticsearch也是使用Java編寫的,它...
閱讀 1608·2021-11-23 09:51
閱讀 1178·2019-08-30 13:57
閱讀 2257·2019-08-29 13:12
閱讀 2011·2019-08-26 13:57
閱讀 1193·2019-08-26 11:32
閱讀 978·2019-08-23 15:08
閱讀 699·2019-08-23 14:42
閱讀 3080·2019-08-23 11:41