Lucene:使用Luke軟件

1.聲明

當前內容主要用於本人學習和複習,當前內容爲使用和操作Luke軟件

2.查看Luke軟件的位置

在這裏插入圖片描述

在這裏插入圖片描述

打開它:

luke

3.使用Luke

1.選擇一個索引文件夾並打開
在這裏插入圖片描述
2.查看OverView界面
在這裏插入圖片描述

  1. 當前的文檔中具有Fields,(即寫入的字段)
  2. 字段中具有Term,並且這個Term是按照分析器進行分析的

3.查看當前的content的Term
在這裏插入圖片描述

可以發現當前由於我使用的是CJKAnaylzer分析器,所以產生的Term就是兩個中文成爲一個Term所以查詢的時候就是使用new QueryTerm(new Term)直接就命中了字段,所以這麼快

所以可以判定,使用不同的Anaylzer就會產生不同的Term,不同的Term那麼搜索方式也不同,當前就是將文本內容按照兩個文字進行分割成一個Term

4.查看Documents界面

在這裏插入圖片描述
當前的文檔中具有標記,通過選擇filed的名稱和Term方式進行搜索

顯示的數據中,具有字段,標記,Norm,以及value

5.查看search
在這裏插入圖片描述

通過分析發現當前默認使用的是:StandardQueryParser,並且使用的Query expression爲:*:*,結果爲所有的文檔數據

所以本人分析是不是可以通過:*:*方式實現查詢所有的數據的目的

查詢的文檔中具有score分數

6.查看Analysis
在這裏插入圖片描述
這裏測試發現使用StandardAnalyzer方式默認產生的Term就是單個單詞的字母全部小寫,所以不同的分析器產生的結果也不一樣

7.查看Commits

在這裏插入圖片描述
通過分析發現當前的segment文件其實就是一些所謂的系統的配置文件

8.查看logs
在這裏插入圖片描述
這裏主要就是一些日誌信息

4.分析發現

  1. 我們通過創建不同的Anaylzer分析器那麼那些被加入到Document中的Field中的所產生的Term就不同
  2. 我們的Document中包含多個Field,並且一個Field可以通過分析器產生多個Term
  3. 我們通過查詢的時候就是使用Term來實現查詢的(這就是爲什麼Lucene這麼快)
  4. Lucene沒有分頁操作,只能手動物理分頁

5.實現查詢全部的效果

直接使用*:*來實現

	public static ArrayList<Document> findAllDocuments2(String indexPath, String fieldName, int num)
			throws IOException, ParseException, QueryNodeException {
		return findDocumentsByQuery(indexPath, fieldName,"*:*", num);
	}
	
	public static ArrayList<Document> findDocumentsByQuery(String indexPath, String filedName, String experssion,
			int num) throws IOException, ParseException, QueryNodeException {
		try (Directory dir = FSDirectory.open(Paths.get(indexPath));
				DirectoryReader directoryReader = DirectoryReader.open(dir);) {
			IndexSearcher indexSearcher = new IndexSearcher(directoryReader);
			StandardQueryParser parser = new StandardQueryParser(new StandardAnalyzer());
			Query query = parser.parse(experssion, filedName);
			// TotalHits totalHits = topDocs.totalHits;
			ArrayList<Document> docs = search(indexSearcher, query, num);
			return docs;
		}

	}

測試結果
在這裏插入圖片描述
成功查詢了數據,這說明當前的查詢全部可以使用:*:*來實現,但是還是要指定查詢的字段

6.總結

1.通過分析當前的Luke的軟件,發現了當前的查詢的來源,以及實際上各種組件之間的使用

2.查詢實際就是根據Term進行匹配

以上純屬個人見解,如有問題請聯本人!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章