lucene基礎(chǔ)學(xué)習(xí)_第1頁(yè)
lucene基礎(chǔ)學(xué)習(xí)_第2頁(yè)
lucene基礎(chǔ)學(xué)習(xí)_第3頁(yè)
lucene基礎(chǔ)學(xué)習(xí)_第4頁(yè)
lucene基礎(chǔ)學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、搜索引擎Lucene第一章Lucene簡(jiǎn)介L(zhǎng)ucene是apache軟件基金會(huì) jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開(kāi)放源代碼的全文檢索引擎工具包,即它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語(yǔ)言)。Lucene的目的是為軟件開(kāi)發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。第二章lucene索引的建立2.1Lucene的五個(gè)基礎(chǔ)類索引的建立,Lucene 提供了五個(gè)基礎(chǔ)類,分別是 Document, Field, IndexWriter,

2、Analyzer, Directory。以下是他們的用途:l DocumentDocument的含義為文檔,在Lucene中,它代表一種邏輯文件。Lucene本身無(wú)法對(duì)物理文件建立索引,而只能識(shí)別并處理Document的類型文件。Lucene從Document取出相關(guān)的數(shù)據(jù)源并根據(jù)屬性配置進(jìn)行相應(yīng)的處理。l Field對(duì)象是用來(lái)描述一個(gè)文檔的某個(gè)屬性的lucene中的field也具有一些特定的類型如Field方法/參數(shù)類型Tokenized(編譯器)Indexed(索引)Store(存儲(chǔ))處理方式與用途Field( String,String,Store.Yes,Index.UN_TOKENI

3、ZED )否是是不分詞,但是需要經(jīng)過(guò)建立索引并存儲(chǔ)比如;日期Field( String,String,Store. YES,Index.NO )否否是不索引,只存儲(chǔ),比如:文件路徑Field( String,String,Store.NO,Index.UN_TOKENIZED )是是否經(jīng)過(guò)倒排建立全文檢索,不存儲(chǔ),比如:檢索以String方式錄入的內(nèi)容文本Field( String,String,Store.Yes,Index.YES )是是是分詞并經(jīng)過(guò)倒排建立索引并存儲(chǔ),比如:標(biāo)題Field( String,Reader,Store.NO,Index.UN_TOKENIZED )是是否分詞并

4、經(jīng)過(guò)倒排建立索引但是不存儲(chǔ),不用于返回顯示,比如:檢索以reader方式錄入的內(nèi)容文本Field( String,byte,Store.YES)否否是只存儲(chǔ),不索引Field( String,Reader,TermVector)是是否盡力全文索引,不存儲(chǔ)在lucene2.0中,F(xiàn)ield內(nèi)部包含兩個(gè)靜態(tài)的內(nèi)部類分別是Store和Index詳細(xì)的描述了Field的屬性,它們分別表示Field的儲(chǔ)存方式和索引方式。Store類有3個(gè)公有的靜態(tài)屬性:1. Store.NO:表示該Field不需要儲(chǔ)存。2. Store.YES:表示該Field需要儲(chǔ)存。3. Store.COMPRESS:表示使用壓縮

5、方式來(lái)保存這個(gè)Field的值。Index有4個(gè)公有的靜態(tài)屬性:1. Index.NO:表示該Field不需要索引,也就是用戶不需要去查找該Field的值。2. Index.TOKENIZED:表示該Field先被分詞再被索引。3. Index.UN_ TOKENIZED:表示不對(duì)該Field進(jìn)行分詞,但是要對(duì)他進(jìn)行索引,也就是該Field會(huì)被用戶查找。4. Index.NO_NORMS:表示對(duì)該Field進(jìn)行索引,但是不使用Analyzer,同時(shí)禁止它參加評(píng)分,主要是為了減少內(nèi)存的消耗。l Analyzer在一個(gè)文檔被索引之前,首先需要對(duì)文檔內(nèi)容進(jìn)行分詞處理,這部分工作就是由 Analyzer

6、 來(lái)做的。Analyzer 類是一個(gè)抽象類,它有多個(gè)實(shí)現(xiàn)。針對(duì)不同的語(yǔ)言和應(yīng)用需要選擇適合的 Analyzer。Analyzer 把分詞后的內(nèi)容交給 IndexWriter 來(lái)建立索引。l IndexWriterIndexWriter 是 Lucene 用來(lái)創(chuàng)建索引的一個(gè)核心的類,他的作用是把一個(gè)個(gè)的 Document 對(duì)象加到索引中來(lái)。l Directory這個(gè)類代表了 Lucene 的索引的存儲(chǔ)的位置,這是一個(gè)抽象類,它目前有兩個(gè)實(shí)現(xiàn),第一個(gè)是 FSDirectory,它表示一個(gè)存儲(chǔ)在文件系統(tǒng)中的索引的位置。第二個(gè)是 RAMDirectory,它表示一個(gè)存儲(chǔ)在內(nèi)存當(dāng)中的索引的位置。2.2建

7、立索引過(guò)程IndexWrite的初始化在Lucene中,IndexWrite的主要作用是對(duì)索引進(jìn)行創(chuàng)建,加入Document,合并各種索引段,以及控制與索引相關(guān)的各方面,它是Lucene的索引主要操作者。3個(gè)公有的構(gòu)造函數(shù):要獲得一個(gè)IndexWrite的實(shí)例,就需要從它的構(gòu)造函數(shù)入手嘗試。具體的構(gòu)造函數(shù)如下:public IndexWrite(String path, Analyzer a, Boolean create)public IndexWrite(File path , Analyzer a, Boolean create)public IndexWrite(Directory d

8、, Analyzer a, Boolean create)創(chuàng)建新的segments文件,并寫入版本號(hào),修改次數(shù)等信息讀取原來(lái)的segments文件,讀出版本號(hào),短信息等Writer對(duì)象初始化完畢初始化一個(gè)分析器對(duì)像,作為參數(shù)傳入write對(duì)象傳入建立索引的路徑,即用戶希望將索引建立的位置為該目錄上鎖用戶希望把該索引目錄原來(lái)的內(nèi)容刪去嗎?第一個(gè)參數(shù)為索引存放路徑,第二個(gè)參數(shù)Analyzer為分詞器,第三個(gè)參數(shù)是一個(gè)Boolean類型的值,這個(gè)參數(shù)的含義是:在由第一個(gè)參數(shù)所指定的路徑處,刪除原目錄內(nèi)的所有內(nèi)容重新構(gòu)建索引:或是追加新的Document。像索引添加文檔IndexWrite準(zhǔn)備好以后,

9、就可以想索引目錄中添加Document。IndexWrite提供了很簡(jiǎn)單的接口以供開(kāi)發(fā)人員進(jìn)行Document的添加:public void addDocument(Document doc)public void addDocument(Document doc,Analyzer analyzer)注意:在使用addDocument方法加入所有的Document后,一定要使用IndexWrite的close方法來(lái)關(guān)閉索引器,使所有在I/O緩存中的數(shù)據(jù)都寫入到磁盤上,關(guān)閉各種流。這樣才能最終完成索引的建立。如果沒(méi)有關(guān)閉,就會(huì)發(fā)現(xiàn)索引目錄中內(nèi)除了一個(gè)segment文件外一無(wú)所有。很多初學(xué)者在剛開(kāi)

10、始使用Lucene時(shí)經(jīng)常忘記關(guān)閉IndexWrite,這樣會(huì)導(dǎo)致索引的數(shù)據(jù)滯留在緩存中,未寫入磁盤,有可能連目錄的鎖也沒(méi)有去除。在下次對(duì)同一個(gè)目錄加入索引文件的時(shí)候可能會(huì)提示目錄處于鎖定狀態(tài)而造成無(wú)法加入文件。限制每個(gè)Field中詞條的數(shù)量有必要為L(zhǎng)ucene限制每個(gè)Field內(nèi)可以建立索引的詞條數(shù)。public void setMaxFieldLength(int maxFieldLength)2.3索引過(guò)程的優(yōu)化合并因子mergeFactor說(shuō)明:無(wú)論是磁盤上創(chuàng)建新segment還是將segment合并,都需要進(jìn)行磁盤的I/O操作,相對(duì)于內(nèi)存的操作來(lái)說(shuō),這種磁盤I/O操作是比較費(fèi)時(shí)的。因此

11、,當(dāng)mergeFactor取比較小的值時(shí),內(nèi)存中駐留的文檔數(shù)量較少,向磁盤寫入segment的操作較多,故此時(shí)將占用較小的內(nèi)存,但是索引的建立由于I/O操作頻繁所以會(huì)比較慢。而當(dāng)mergeFactor取較大值時(shí),內(nèi)存中駐留的Document數(shù)量較多,向磁盤寫入segemnt的操作較少,故此時(shí)將占用較多的內(nèi)存,但索引的建立速度會(huì)比較快。maxMergeDocs一個(gè)較大的MaxMergeDocs適用于應(yīng)對(duì)大批量的文檔索引建立,而增量式的索引則使用較小的MaxMergeDocs。minMergeDocs當(dāng)索引將被存到磁盤中時(shí),需要首先保存在內(nèi)存中,minMergeDocs就是用來(lái)限制這個(gè)內(nèi)存中的文檔

12、數(shù)量的。索引的合并和優(yōu)化2.3.2 FSDirectory 與RAMDirectory對(duì)于lucene來(lái)說(shuō)這兩種目錄都可以作為索引的存儲(chǔ)路徑,F(xiàn)SDirectory指的是在文件系統(tǒng)中的一個(gè)路徑。當(dāng)lucene向其中寫入索引時(shí),會(huì)直接將索引寫到磁盤上,RAMDirectory是內(nèi)存中的區(qū)域,雖然向其中添加document的過(guò)程與使用FSDirectory中的內(nèi)存寫入磁盤,當(dāng)虛擬機(jī)退出后,里面的內(nèi)容也會(huì)隨之消失。因此需要將RAMDirectory中的內(nèi)容轉(zhuǎn)移到FSDirectory中。代碼:從索引中刪除文檔索引的讀取工具IndexReader刪除IndexReader 主要負(fù)責(zé)對(duì)索引的各種讀取和維

13、護(hù)工作,如打開(kāi)一個(gè)索引、取得索引中的某個(gè)文檔、獲取索引中的總文檔的數(shù)量,甚至從索引中刪除某個(gè)文檔。生成實(shí)例方法IndexReader reader = IndexReader.open( INDEX_STORE_PATH );方法reader.deleteDocument(0);在luncene的內(nèi)部使用類似回收站的機(jī)制來(lái)管理Document的刪除,在每個(gè)Document被索引中刪除時(shí),它只相當(dāng)于被扔進(jìn)了回收站,并未實(shí)際刪除。既然是回收站,Lucene提供了undeleteAll()方法實(shí)現(xiàn)反刪除。真正的實(shí)現(xiàn)從一個(gè)索引中刪除文檔需要使用IndexWriter對(duì)索引optimize一次,lunc

14、ene就會(huì)重新為每個(gè)文檔分配ID值,這樣那些標(biāo)記為已刪除的Document就真正的被無(wú)理刪除了。IndexWriter writer = new IndexWriter( INDEX_STORE_PATH,new StandardAnalyzer(),false );Writer.Optimize();使用Field信息來(lái)刪除批量文檔IndexReader的deleteDocuments()方法是一個(gè)能批量刪除索引的方法,它刪除索引是按照詞條進(jìn)行的,也就是說(shuō),每個(gè)詞條都可以用其所在的Field和他的值來(lái)表示。2.3.4 Lucene同步法則開(kāi)發(fā)人員容易忽略掉同步問(wèn)題,一旦發(fā)生這種情況,索引的完

15、整性和數(shù)據(jù)的一致性就遇到了挑戰(zhàn)。 write.lockwrite.lock出現(xiàn)在想索引中添加文檔時(shí)或?qū)⑽臋n從索引中刪除時(shí),write.Lock會(huì)在IndexWrite初始化時(shí)創(chuàng)建,然后在調(diào)用IndexWriter的close()方法是被釋放。另外,會(huì)在Indexreader使用delete方法刪除文檔時(shí)創(chuàng)建,并在調(diào)用IndexReader的close()方法是被釋放。commit.lockcommit.lock主要是與segment合并和讀取操作相關(guān),例如,他出現(xiàn)在IndexWriter初始化時(shí),但是一旦當(dāng)segment的信息被讀取完畢,他會(huì)立刻被釋放。另外,當(dāng)調(diào)用IndexWr

16、iter的addIndexes()或mergeSegments()方法時(shí),都會(huì)生成這個(gè)鎖。2.3.5 Luncene2.0的新類:IndexModifier類IndexModifier,它集成了IndexWriter的大部分功能和IndexReader中對(duì)索引的刪除功能。第三章Lucene的搜索Lucene里與搜索相關(guān)的API多數(shù)被包含在org包中。其中最重要的是IndexSearch類。在Lucene中,所有與搜索相關(guān)的操作都需要用到這個(gè)類。3.1IndexSearch的構(gòu)造方法public IndexSearch( String path )throws IOExceptionpublic

17、 IndexSearch(Directory directory)throws IOExceptionpublic IndexSearch( IndexReader r )3.2IndexSearch最簡(jiǎn)單的使用代碼3.3IndexSearch的多種search方法/search的重載方法void search( Weight weight,Filter filter,HitCollector results )/關(guān)閉searcher,同時(shí)也關(guān)閉了IndexReadervoid close()throws IOException/計(jì)算索引中包含有指定的一個(gè)term信息的文檔量int docFr

18、eq( Term term ) throws IOException/計(jì)算索引中包含有指定的一組term信息int docFreq( term terms ) throws IOException/返回索引中最大可能具有document的數(shù)量(再加1)int maxDoc()throws IOException/search的重載方法TopDocs search( weight weitght,Filter filter,int n ) throws IOException/取出索引中id號(hào)為i的索引Document docint ithrows IOException;/對(duì)查詢進(jìn)行rewri

19、te,使之成為原子查詢Query rewrite( Query query ) throws IOException/對(duì)查詢結(jié)果的權(quán)重進(jìn)行翻譯Explanation explain( Weight weight,int doc ) throws IOException/Searcha的重載方法TopFiledDocs search(Weight weight, Filter filter,int n,Sort sort ) throws IOException注:l Query:表示一次查詢l Hits:表示一次查詢的結(jié)果l Filter:表示對(duì)索引中文檔集合的過(guò)濾器,它是檢索在某一個(gè)文檔集合

20、的子集中進(jìn)行l(wèi) Sort:對(duì)索引的結(jié)果進(jìn)行排序的工具l HitCollector:對(duì)檢索結(jié)果進(jìn)行選擇的一個(gè)工具,并將選擇后的結(jié)果保存在其中l(wèi) Weight:就是”權(quán)重”表示一次查詢時(shí),索引中的某個(gè)文檔的重要信息。Hits類詳解Hits類可以幫助取得Lucene搜索的結(jié)果。并且,在Lucene2.0版本的Hits中,還提供了iterator,可以進(jìn)行遍歷Hits的公共接口/取得當(dāng)前結(jié)果集的數(shù)量public final int length()/取得結(jié)果集中第n個(gè)documentpublic final Document doc( int n ) throws IOException/取得當(dāng)前結(jié)果

21、集中第n個(gè)Document的得分public final score( int n )throws IOException/取得當(dāng)前結(jié)果集中第n個(gè)Document的索引內(nèi)部的id值public final int id( int n ) throws IOException/取得his集合的遍歷對(duì)象public Iterator iterator()3.4Lucene內(nèi)建的Query對(duì)象Ø TermQuery 詞條搜索通過(guò)對(duì)某個(gè)固定詞條的制定實(shí)現(xiàn)檢索索引中存在該詞條的所有文檔Ø BooleanQuery 布爾搜索布爾查詢,由多個(gè)子句和子句間的布爾邏輯組成的查詢代碼Must和

22、must表示取兩個(gè)查詢子句檢索結(jié)果的交集Must和must_not表示查詢的結(jié)果中不能包含must_not所對(duì)應(yīng)的查詢子句的檢索結(jié)果Must 最終結(jié)果Must_not子句的查詢結(jié)果must_not和must_not沒(méi)有實(shí)際意義,可以理解為兩個(gè)子句的檢索結(jié)果都不要。should與 must 、should與 must_notShould是一個(gè)比較特殊的約束。當(dāng)他與must聯(lián)用時(shí),它失去意義。檢索結(jié)果為must子句的檢索結(jié)果。當(dāng)它與must_not聯(lián)用時(shí),should的功能就與must一樣,就退變成為must和must_not的查詢結(jié)果should和 should 表示一種“或”的關(guān)系,為所有檢索

23、子句的檢索結(jié)果的并集BooleanQuery 對(duì)查詢子句是有限制的最大為1024超過(guò)這個(gè)數(shù)量會(huì)拋出TooManyClauses異常。但用戶也可以通過(guò)public static void setMaxClauseCount( int maxClauseCount )改變最大數(shù)量Ø RangeQuery 范圍搜索在某些情況下,用戶需要查找一定范圍內(nèi)的文檔。這種范圍可以使時(shí)間、日期數(shù)字大小等,RangeQuery 就是來(lái)幫助用戶進(jìn)行這種查找false表示閉區(qū)間true開(kāi)區(qū)間Ø PrefixQuery 前綴搜索是一種前綴查找,在檢索的時(shí)候,常常需要進(jìn)行某種前綴查找。Ø P

24、hraseQuery 短語(yǔ)搜索允許在在詞之間加一個(gè)字Ø MultiPhraseQuery 多短語(yǔ)搜索Ø FuzzyQuery 模糊搜索Ø WildcardQuery 通配符搜索Ø SpanQuery 跨度搜索Ø RegxQuery 第三方提供的Query對(duì)象第四章 排序和過(guò)濾4.1使用score進(jìn)行自然排序相關(guān)度排序是一種最簡(jiǎn)單的排序方式,所謂相關(guān)度就是文檔的得分用法:說(shuō)明:圖中的排序時(shí)按照相關(guān)度自高像低排序,也就是說(shuō)用戶檢索內(nèi)容最為相近的排在前面通過(guò)改變boost值來(lái)改變文檔的得分在進(jìn)行相關(guān)度排序的時(shí)候,如果想人為的增加某個(gè)文檔的相關(guān)度,使其

25、在搜索結(jié)果中排在更靠前的位置上,則可以使用boostdoc.setBoost(2f);4.2Sort排序sort是Lucene自帶的一個(gè)排序工具,通過(guò)它,可以方便的對(duì)檢索結(jié)果進(jìn)行排序.在使用它時(shí),需要實(shí)例化一個(gè)sort對(duì)象,并使用Searcher提供的search( Query,Sort )接口來(lái)實(shí)現(xiàn)。Sort的構(gòu)造方法public Sort();/按field進(jìn)行查詢public Sort( String field );/按field進(jìn)行查詢,reverse false升序 true 降序默認(rèn)fasepublic Sort( String field,Boolean reverse );/

26、按field數(shù)組進(jìn)行查詢public Sort( String fields );public Sort( SortField field );public Sort( SortField fields )SortFieldSortField實(shí)際上是個(gè)包裝類型,通過(guò)它的包裝可以使Sort類清楚地了解進(jìn)行排序的Field的各種信息構(gòu)造函數(shù)Public SortField( String field )Public SortField( String field,Boolean reverse )Public SortField( String field ,int type)Public Sor

27、tField( String field,int type,Boolean reverse )String 類型的是Field的名稱,Boolean升序還是降序,int型的值,用于指定當(dāng)前Field的值類型 SortField.INT SortField.STRING按文檔得分進(jìn)行排序Sort.RELEVANGEHits hits = searcher.search( query, Sort.RELEVANGE )按文檔的內(nèi)部id號(hào)排序Sort.INDEXORDERHits hits = searcher.search( query, Sort. INDEXORDER)按一個(gè)或多個(gè)Field來(lái)

28、排序Sort sort = new Sort();SortField f1 = new SortField( ”bookNumber”,SortField.INT,false );SortField f2 = new SortField( ”publishdate”,SortField.INT,false );Sort.setSort( new SortFieldf1,f2 )Hits hits = searcher.search( q,sort )4.3搜索的過(guò)濾器搜索時(shí)過(guò)濾器是一種減少搜索范圍的方式,即使搜索結(jié)果匹配,但是由于文檔已經(jīng)被過(guò)濾,所以仍然不會(huì)返回給客戶,有了這種特性就可以實(shí)現(xiàn)很

29、多功能,比如可以用它來(lái)實(shí)現(xiàn)一種安全機(jī)制,既保護(hù)某些文檔無(wú)法被檢索到過(guò)濾器的基本結(jié)構(gòu)Public abstract BitSet bits( IndexReader reader )throws IOException;BitSets是一種“位集合”隊(duì)列,這個(gè)隊(duì)列的每個(gè)元素都只有兩種取值,即true或false,lucene以這種值來(lái)代表文檔是否被過(guò)濾,也就是說(shuō),當(dāng)lucene返回結(jié)果時(shí),會(huì)先遍歷BitSet,僅將那些對(duì)應(yīng)值為true的文檔返回。RangeFilter 將檢索結(jié)果限定在某個(gè)給定的Field值范圍RangeFilte filter = new RangeFilter( “publi

30、shdate”,”1970-01-01”,”1990-01-01”,”true”,”true” );Hits hits = search.search( q,filter );QueryFilter 在結(jié)果中查詢當(dāng)一次檢索完畢后,希望能從上一次檢索的結(jié)果集合中進(jìn)行二次檢索第五章文本分析器5.1空格分詞器空格解析器(WhitespaceAnalyzer)空格解析器利用空格將文本中的各個(gè)單詞分割解析出來(lái)。這種解析器對(duì)帶有空格的印歐語(yǔ)系書寫方式的文本都能處理 WhitespaceAnalyzer的結(jié)構(gòu)簡(jiǎn)單。如下所示從圖科看出,WhitespaceAnalyzer繼承自Analyzer。在繼承的方法中

31、創(chuàng)建了一個(gè)WhitespaceTokenizer實(shí)例。大部分解析的分詞功能是由Tokenizer類實(shí)現(xiàn)的5.1.2空格分詞器(WhitespaceTokenizer)WhitespaceTokenizer繼承自抽象類CharTokenizer,WhitespaceTokenizer的next方法也繼承自CharTokenizer類5.2標(biāo)準(zhǔn)分詞器5.2.1標(biāo)準(zhǔn)解析器標(biāo)準(zhǔn)解析器依靠標(biāo)準(zhǔn)分次器(StandardTokenizer)將輸入的文本解析為token流。我們對(duì)其內(nèi)部有特色的屬性與方法深入剖析。該解析器特有屬性與方法為:屬性;停用表(stopwords)停用表中存放的是一些高頻率出現(xiàn)的英文單詞,中文文字,高頻此信息量小會(huì)帶來(lái)索引文件增大方法:tokenStream 方法,TokenStream 的層次結(jié)構(gòu)StopFilterProterStemfilterLowerCaseFilterStandardFilterTokenStreamTokenFilterTokenizerCharTokenizerStandardTokenizerletterTokenizerWhitespaceToken

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論