lucence索引类
Lucence索引类
Indexing
常用索引进程类的列表:
| num | sr.no | 类及描述 |
|---|---|---|
| 1 | IndexWriter | 此类充当创造/在索引过程中更新指标的核心部分 |
| 2 | Directory | 此类表示索引的存储位置 |
| 3 | Analyzer | Analyzer类负责分析一个文件,并将被索引的文本获取令牌/字。不加分析完成后,IndexWriter不能创建索引。 |
| 4 | Document | Document代表一个虚拟文档与字段,其中字段是可包含在物理文档的内容,元数据等对象。Analyzer只能理解文档 |
| 5 | Field | Field是最低单元或索引过程的起点。他代表其中一个键用于识别被索引的键值对关系。用于表示一个文件内容的字段将具有键为“内容”,值可以包含文本或文档的数字内容的部分或全部。Lucene能索引仅文本或数字内容。 |
IndexWriter
此类充当创造/在索引过程中更新指标的核心组成部分。
类声明
以下是 org.apache.lucene.index.IndexWriter 类的声明:
public class IndexWriter
extends Object
implements Closeable, TwoPhaseCommit
字段
以下是 org.apache.lucene.index.IndexWriter 类的字段:
- static int DEFAULT_MAX_BUFFERED_DELETE_TERMS -- 弃用,使用 IndexWriterConfig.DEFAULT_MAX_BUFFERED_DELETE_TERMS 代替.
- static int DEFAULT_MAX_BUFFERED_DOCS -- 弃用,使用 IndexWriterConfig.DEFAULT_MAX_BUFFERED_DOCS 代替.
- static int DEFAULT_MAX_FIELD_LENGTH -- 弃用. 请查看 IndexWriterConfig.
- static double DEFAULT_RAM_BUFFER_SIZE_MB -- 弃用. 使用 IndexWriterConfig.DEFAULT_RAM_BUFFER_SIZE_MB 代替
- static int DEFAULT_TERM_INDEX_INTERVAL -- 弃用. 使用 IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL 代替.
- static int DISABLE_AUTO_FLUSH -- 弃用. 使用 IndexWriterConfig.DISABLE_AUTO_FLUSH 代替.
- static int MAX_TERM_LENGTH
- static String WRITE_LOCK_NAME -- 在索引写入锁的名称。
- static long WRITE_LOCK_TIMEOUT -- 已弃用,使用 IndexWriterConfig.WRITE_LOCK_TIMEOUT 代替.
类的构造函数
| S.N. | 构造函数和说明 | 结果 |
|---|---|---|
| 1 | IndexWriter(Directory d, Analyzer a, boolean create, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl) | 弃用,使用 IndexWriter(Directory, IndexWriterConfig) 代替. |
| 2 | IndexWriter(Directory d, Analyzer a, boolean create, IndexWriter.MaxFieldLength mfl) | 弃用,使用 IndexWriter(Directory, IndexWriterConfig) 代替. |
| 3 | IndexWriter(Directory d, Analyzer a, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl) | 弃用,使用 IndexWriter(Directory, IndexWriterConfig) 代替. |
| 4 | IndexWriter(Directory d, Analyzer a, IndexDeletionPolicy deletionPolicy, IndexWriter.MaxFieldLength mfl, IndexCommit commit) | 弃用,使用 IndexWriter(Directory, IndexWriterConfig) 代替. |
| 5 | IndexWriter(Directory d, Analyzer a, IndexWriter.MaxFieldLength mfl) | 弃用,使用 IndexWriter(Directory, IndexWriterConfig) 代替. |
| 6 | IndexWriter(Directory d, IndexWriterConfig conf) | 每个构造由 conf 中给出的设置一个新的IndexWriter。 |
类方法
| S.N. | 方法 & 描述 | |
|---|---|---|
| 1 | void addDocument(Document doc) | 此索引增加了一个文件 |
| 2 | void addDocument(Document doc, Analyzer analyzer) | 增加了一个文件,这个索引使用所提供的analyzer,而不是getAnalyzer()的值 |
| 3 | void addDocuments(Collection docs) | 原子增加了使用顺序分配的文档ID,以使得外部读取器将显示所有的文件或无文件的块。 |
| 4 | void addDocuments(Collection docs, Analyzer analyzer) | 原子增加了文件块,分析使用提供的分析,使用顺序分配文件的ID,这样外部的读取器会看到全或无的文件。 |
| 5 | void addIndexes(Directory... dirs) | 从索引数组将所有片段添加到这个索引。 |
| 6 | void addIndexes(IndexReader... readers) | 合并所提供的索引到这个索引。 |
| 7 | void addIndexesNoOptimize(Directory... dirs) | 弃用. 使用 addIndexes(Directory...) 代替 |
| 8 | void close() | 提交所有更改索引并关闭所有相关文件。 |
| 9 | void close(boolean waitForMerges) | 提交所有更改索引并关闭所有相关文件。 |
| 10 | void commit() | 提交所有挂起的更改(添加和删除文件,段合并,添加索引等),以索引,并同步所有引用索引文件,这样,读取器将会看到的变化和索引的更新将生存的OS或机器崩溃或功率损耗。 |
| 11 | void commit(Map commitUserData) | 提交所有更改索引,指定commitUserData映射(字符串 - >字符串)。 |
| 12 | void deleteAll() | 删除索引中的所有文件。 |
| 13 | void deleteDocuments(Query... queries) | 删除文件匹配提供的任何查询。 |
| 14 | void deleteDocuments(Query query) | 删除文件匹配提供的查询。 |
| 15 | void deleteDocuments(Term... terms) | 删除包含任何条款的文件(多个)。 |
| 16 | void deleteDocuments(Term term) | 删除包含长期的文件(多个)。 |
| 17 | void deleteUnusedFiles() | 删除任何不再使用的索引文件。 |
| 18 | protected void doAfterFlush() | 钩子扩展类悬而未决添加和删除文件后执行操作已经刷新到目录,但提交了更改之前(新segments_N文件写入)。 |
| 19 | protected void doBeforeFlush() | 钩子扩展类悬而未决添加和删除文件前执行操作刷新到目录。 |
| 20 | protected void ensureOpen() | |
| 21 | protected void ensureOpen(boolean includePendingClose) | 内部使用抛出AlreadyClosedException,如果IndexWriter已经关闭。 |
| 22 | void expungeDeletes() | 不推荐使用 |
| 23 | void expungeDeletes(boolean doWait) | 不推荐使用 |
| 24 | protected void flush(boolean triggerMerge, boolean applyAllDeletes) | |
| 25 | protected void flush(boolean triggerMerge, boolean flushDocStores, boolean flushDeletes) | flushDocStores现在忽略(hardwired为true);这种方法在这里向后兼容性 |
| 26 | void forceMerge(int maxNumSegments) | 强制合并的政策合并段,直到有<= maxNumSegments。 |
| 27 | void forceMerge(int maxNumSegments, boolean doWait) | 就像forceMerge(int), 除非指定调用是否应该阻止,直到所有的合并结束。 |
| 28 | void forceMergeDeletes() | 强制已删除文档中的所有段合并。 |
| 29 | void forceMergeDeletes(boolean doWait) | 就像forceMergeDeletes(),除非可以指定调用是否应该阻塞,直到操作完成。 |
| 30 | Analyzer getAnalyzer() | 返回此索引的 analyzer。 |
| 31 | IndexWriterConfig getConfig() | 返回private IndexWriterConfig,从IndexWriterConfig克隆传递给 IndexWriter(Directory, IndexWriterConfig). |
| 32 | static PrintStream getDefaultInfoStream() | 返回当前的默认infoStream 刚刚被实例化IndexWriters。 |
| 33 | static long getDefaultWriteLockTimeout() | 不推荐使用。使用IndexWriterConfig.getDefaultWriteLockTimeout()代替 |
| 34 | Directory getDirectory() | 返回此索引目录。 |
| 35 | PrintStream getInfoStream() | 通过此 writer 返回当前 infoStream 使用 |
| 36 | int getMaxBufferedDeleteTerms() | 不推荐使用。使用IndexWriterConfig.getMaxBufferedDeleteTerms()代替 |
| 37 | int getMaxBufferedDocs() | 不推荐使用。使用IndexWriterConfig.getMaxBufferedDocs()代替 |
| 38 | int getMaxFieldLength() | 不推荐使用。使用LimitTokenCountAnalyzer限制令牌的数量 |
| 39 | int getMaxMergeDocs() | 不推荐使用。使用LogMergePolicy.getMaxMergeDocs()代替 |
| 40 | IndexWriter.IndexReaderWarmer getMergedSegmentWarmer() | 不推荐使用。使用IndexWriterConfig.getMergedSegmentWarmer()代替 |
| 41 | int getMergeFactor() | 不推荐使用。使用LogMergePolicy.getMergeFactor()代替 |
| 42 | MergePolicy getMergePolicy() | 不推荐使用。使用IndexWriterConfig.getMergePolicy()代替 |
| 43 | MergeScheduler getMergeScheduler() | 不推荐使用。使用 IndexWriterConfig.getMergeScheduler() 代替 |
| 44 | Collection getMergingSegments() | 使用一个MergePolicy到空隙选择合并为已被合并的段。 |
| 45 | MergePolicy.OneMerge getNextMerge() | MergeScheduler调用此方法来检索由MergePolicy要求在未来合并 |
| 46 | PayloadProcessorProvider getPayloadProcessorProvider() | 返回一个段期间使用PayloadProcessorProvider合并处理的有效载荷 |
| 47 | double getRAMBufferSizeMB() | 不推荐使用。使用IndexWriterConfig.getRAMBufferSizeMB()代替 |
| 48 | IndexReader getReader() | 不推荐使用。使用 IndexReader.open(IndexWriter,boolean) 代替. |
| 49 | IndexReader getReader(int termInfosIndexDivisor) | 不推荐使用。使用 IndexReader.open(IndexWriter,boolean) 代替.此外,这种方法不能保证在读取器(和它的子读取器)将被打开,并在termInfosIndexDivisor设置,因为其中的一些可能已经根据IndexWriterConfig.setReaderTermsIndexDivisor(int)打开。应该通过IndexWriterConfig.setReaderTermsIndexDivisor(int)设置请求使用termInfosIndexDivisor和getReader()。 |
| 50 | int getReaderTermsIndexDivisor() | 不推荐使用。使用IndexWriterConfig.getReaderTermsIndexDivisor()代替 |
| 51 | Similarity getSimilarity() | 不推荐使用。使用 IndexWriterConfig.getSimilarity() 代替 |
| 52 | int getTermIndexInterval() | 不推荐使用。使用IndexWriterConfig.getTermIndexInterval() |
| 53 | boolean getUseCompoundFile() | 不推荐使用。使用 LogMergePolicy.getUseCompoundFile() |
| 54 | long getWriteLockTimeout() | 不推荐使用。使用 IndexWriterConfig.getWriteLockTimeout() |
| 55 | boolean hasDeletions() | |
| 56 | static boolean isLocked(Directory directory) | 当且仅当索引在指定的目录目前被锁定,则返回true。 |
| 57 | int maxDoc() | 返回文档的此索引总数,包括文档尚未刷新(仍然在RAM缓冲器),不计算缺失。 |
| 58 | void maybeMerge() | 询问 mergePolicy 任何合并是否有需要现在,如果是,运行所需的合并,然后进行迭代(测试再次如果需要合并),直到没有更多的合并被 mergePolicy 返回。 |
| 59 | void merge(MergePolicy.OneMerge merge) | 合并所指示的段,用单段替换它们在栈中 |
| 60 | void message(String message) | 打印一条消息infoStream(如果非空),前缀为此writer识别信息,并且在调用它的线程 |
| 61 | int numDeletedDocs(SegmentInfo info) | 获得删除文档的数量汇集读取器 |
| 62 | int numDocs() | 返回文档的此索引总数,包括文档尚未刷新(仍然在RAM缓冲器),并包括缺失 |
| 63 | int numRamDocs() | 返回当前在RAM中缓冲的文档的数量 |
| 64 | void optimize() | 不推荐使用 |
| 65 | void optimize(boolean doWait) | 不推荐使用 |
| 66 | void optimize(int maxNumSegments) | 不推荐使用 |
| 67 | void prepareCommit() | 为提交做准备 |
| 68 | void prepareCommit(Map commitUserData) | 为提交做准备,指定commitUserData映射(字符串 - >字符串) |
| 69 | long ramSizeInBytes() | 目前返回在内存中缓存的所有索引文件的总大小 |
| 70 | void rollback() | 关闭IndexWriter而不提交自上次发生的任何改变提交(或因为它被打开,如果提交没有被调用)。 |
| 71 | String segString() | |
| 72 | String segString(Iterable infos) | |
| 73 | String segString(SegmentInfo info) | |
| 74 | static void setDefaultInfoStream(PrintStream infoStream) | 如果非空,这将是使用一个新实例化IndexWriter默认infoStream。 |
| 75 | static void setDefaultWriteLockTimeout(long writeLockTimeout) | 不推荐使用。使用IndexWriterConfig.setDefaultWriteLockTimeout(long)代替 |
| 76 | void setInfoStream(PrintStream infoStream) | 如果非空,有关合并,删除时MaxFieldLength到达的消息信息将被打印到这一点 |
| 77 | void setMaxBufferedDeleteTerms(int maxBufferedDeleteTerms) | 不推荐使用。使用 IndexWriterConfig.setMaxBufferedDeleteTerms(int) 代替. |
| 78 | void setMaxBufferedDocs(int maxBufferedDocs) | 不推荐使用。使用 IndexWriterConfig.setMaxBufferedDocs(int) 代替. |
| 79 | void setMaxFieldLength(int maxFieldLength) | 不推荐使用。使用 LimitTokenCountAnalyzer 代替. 需要注意的是行为略有改变- 分析器限制每个创建令牌流的令牌的数量,而此设置限制令牌索引的总数。这只是问题只有在索引多值的字段。 |
| 80 | void setMaxMergeDocs(int maxMergeDocs) | 不推荐使用。使用 LogMergePolicy.setMaxMergeDocs(int) 代替. |
| 81 | void setMergedSegmentWarmer(IndexWriter.IndexReaderWarmer warmer) | 不推荐使用。使用 IndexWriterConfig.setMergedSegmentWarmer( org.apache.lucene.index.IndexWriter.IndexReaderWarmer ) 代替. |
| 82 | void setMergeFactor(int mergeFactor) | 不推荐使用。使用 LogMergePolicy.setMergeFactor(int) 代替. |
| 83 | void setMergePolicy(MergePolicy mp) | 不推荐使用。使用 IndexWriterConfig.setMergePolicy(MergePolicy) 代替. |
| 84 | void setMergeScheduler(MergeScheduler mergeScheduler) | 不推荐使用。使用 IndexWriterConfig.setMergeScheduler(MergeScheduler) 代替 |
| 85 | void setPayloadProcessorProvider(PayloadProcessorProvider pcp) | 设置合并有效负载时使用PayloadProcessorProvider。 |
| 86 | void setRAMBufferSizeMB(double mb) | 不推荐使用。使用 IndexWriterConfig.setRAMBufferSizeMB(double) 代替. |
| 87 | void setReaderTermsIndexDivisor(int divisor) | 不推荐使用。使用 IndexWriterConfig.setReaderTermsIndexDivisor(int) 代替. |
| 88 | void setSimilarity(Similarity similarity) | 不推荐使用。使用 IndexWriterConfig.setSimilarity(Similarity) 代替 |
| 89 | void setTermIndexInterval(int interval) | 不推荐使用。使用 IndexWriterConfig.setTermIndexInterval(int) |
| 90 | void setUseCompoundFile(boolean value) | 不推荐使用。使用 LogMergePolicy.setUseCompoundFile(boolean). |
| 91 | void setWriteLockTimeout(long writeLockTimeout) | 不推荐使用。使用IndexWriterConfig.setWriteLockTimeout(long)代替 |
| 92 | static void unlock(Directory directory) | 强行解锁指数在指定的目录 |
| 93 | void updateDocument(Term term, Document doc) | 首先删除包含term文件,然后添加新文档更新文档 |
| 94 | void updateDocument(Term term, Document doc, Analyzer analyzer) | 首先删除包含 term 文件,然后添加新文档更新文档 |
| 95 | void updateDocuments(Term delTerm, Collection docs) | 原子删除文件相匹配的设置delTerm,并增加了与顺序分配的文档ID,以使得外部读取器将显示所有的文件或无文件的块 |
| 96 | void updateDocuments(Term delTerm, Collection docs, Analyzer analyzer) | 原子删除文件匹配提供delTerm,并增加了文件块,分析,使用所提供的分析,有顺序分配文件ID,这样外部的读取器可以看到全或无的文件 |
| 97 | boolean verbose() | 如果verbosing启用返回true(即infoStream! |
| 98 | void waitForMerges() | 等待任何当前未合并结束 |
Directory
Directory类表示索引的存储位置,并通常是文件的列表。这些文件被称为索引文件。索引文件通常创建一次,然后用于读操作或可以被删除。
类声明
以下是org.apache.lucene.store.Directory类的声明:
public abstract class Directory
extends Object
implements Closeable
字段
以下是org.apache.lucene.store.Directory类的字段:
- protected boolean isOpen
- protected LockFactory lockFactory -- 持有LockFactory实例(工具锁定此目录实例)。
类的构造函数
| S.N. | 构造函数和说明 |
|---|---|
| 1 | Directory() |
类方法
| S.N. | 方法 | 描述 |
|---|---|---|
| 1 | void clearLock(String name) | 尝试清除(强行解锁和删除)指定的锁 |
| 2 | abstract void close() | 关闭存储 |
| 3 | static void copy(Directory src, Directory dest, boolean closeDirSrc) | 不推荐使用。应要求被替换复制(目录,字符串,字符串)为每个需要复制的文件。可以使用下面的代码: IndexFileNameFilter filter = IndexFileNameFilter.getFilter(); for (String file : src.listAll()) { if (filter.accept(null, file)) { src.copy(dest, file, file); } } |
| 4 | void copy(Directory to, String src, String dest) | 复制文件到目录src下的新文件名dest |
| 5 | abstract IndexOutput createOutput(String name) | 创建在给定名称的目录中一个新的空文件 |
| 6 | abstract void deleteFile(String name) | 删除目录中的现有文件 |
| 7 | protected void ensureOpen() | |
| 8 | abstract boolean fileExists(String name) | 当且仅当给定名称的文件存在,则返回true |
| 9 | abstract long fileLength(String name) | 返回目录中的文件的长度 |
| 10 | abstract long fileModified(String name) | 不推荐使用 |
| 11 | LockFactory getLockFactory() | 获取此目录实例使用其锁定实现LockFactory |
| 12 | String getLockID() | 返回一个字符串标识符,它唯一来自其他目录情况下,这种区别Directory实例 |
| 13 | abstract String[] listAll() | 返回字符串数组,一个用于在目录中的每个文件 |
| 14 | Lock makeLock(String name) | 构造一个锁 |
| 15 | abstract IndexInput openInput(String name) | 返回流中读取现有的文件 |
| 16 | IndexInput openInput(String name, int bufferSize) | 返回流中读取现有的文件,用指定读缓存的大小 |
| 17 | void setLockFactory(LockFactory lockFactory) | 设置LockFactory这个指南实例应该用于其锁定的实现 |
| 18 | void sync(Collection names) | 确保任何写入这些文件移动到稳定的存储 |
| 19 | void sync(String name) | 不推荐使用。使用同步(集合)来代替。为了便于移植,可以改变代码调用sync(Collections.singleton(name)) |
| 20 | String toString() | |
| 21 | abstract void touchFile(String name) | 不推荐使用。Lucene从未使用这个API;它将在4被移除。0. |
方法继承
这个类从以下类继承的方法:
- java.lang.Object
Document
文档表示一个虚拟文档与字段,其中字段是可包含在物理文档的内容,它的元数据等的对象。Analyzer只能理解文档。
类声明
以下是 org.apache.lucene.document.Document 类的声明:
public final class Document
extends Object
implements Serializable
类构造函数
| S.N. | 构造函数和说明 |
|---|---|
| 1 | Document() |
类方法
| S.N. | 方法及说明 | 描述 |
|---|---|---|
| 1 | void clearLock(String name) | 尝试清除(强行解锁和删除)指定的锁 |
| 2 | void add(Fieldable field) | 增加一个字段到一个文档。 |
| 3 | String get(String name) | 如果存在这个文件,返回给定名称的字段的字符串值或者null。 |
| 4 | byte[] getBinaryValue(String name) | 返回第一个(或唯一)字段中具有指定为方法参数的名称的字节数组。 |
| 5 | byte[][] getBinaryValues(String name) | 返回字节阵列为具有指定为方法参数的名称的字段的数组。 |
| 6 | float getBoost() | 返回时,在索引时间,增强因子由setBoost(float)设置 |
| 7 | Field getField(String name) | 不推荐使用。使用getFieldable(java.lang.String) ,构造根据数据类型。 |
| 8 | Fieldable getFieldable(String name) | 如果存在这个文件,返回一个字段的名字或者为null |
| 9 | Fieldable[] getFieldables(String name) | 返回Fieldables给定的名称的数组 |
| 10 | List getFields() | 返回所有文档中的字段列表 |
| 11 | Field[] getFields(String name) | 不推荐使用。使用getFieldable(java.lang.String) ,根据数据类型构造 |
| 12 | String[] getValues(String name) | 返回指定为方法参数字段的值的数组 |
| 13 | void removeField(String name) | 去除字段中文档中指定的名称 |
| 14 | void removeFields(String name) | 从文档删除指定名称的所有字段 |
| 15 | void setBoost(float boost) | 设置这个文件的任何字段命中因素 |
| 16 | String toString() | 打印供消费的文档域 |
方法继承
这个类从以下类继承的方法:
- java.lang.Object
Field
字段是最低单元或索引过程的起点。它代表其中一个键被用于识别要被索引的值的键值对关系。用于表示一个文件的内容的字段中将具有键为“内容”和值,可以包含文本或文档的数字内容的部分或全部。
Lucene可以索引仅文本或仅数字内容。此类表示索引的存储位置,并通常是文件的列表。这些文件被称为索引文件。索引文件通常创建一次,然后用于读操作或可以被删除。
类声明
以下是 org.apache.lucene.document.Field 类的声明:
public final class Field
extends AbstractField
implements Fieldable, Serializable
类的构造函数
| S.N. | 构造函数和说明 | |
|---|---|---|
| 1 | Field(String name, boolean internName, String value, Field.Store store, Field.Index index, Field.TermVector termVector) | 通过指定名称,值将如何被保存在索引中创建一个字段 |
| 2 | Field(String name, byte[] value) | 创建一个二进制值存储字段中 |
| 3 | Field(String name, byte[] value, Field.Store store) | 不推荐使用 |
| 4 | Field(String name, byte[] value, int offset, int length) | 创建一个二进制值存储字段中 |
| 5 | Field(String name, byte[] value, int offset, int length, Field.Store store) | 不推荐使用 |
| 6 | Field(String name, Reader reader) | 创建未存储一个记号化和索引字段 |
| 7 | Field(String name, Reader reader, Field.TermVector termVector) | 创建未存储,任选具有存储术语矢量的标记化和索引字段 |
| 8 | Field(String name, String value, Field.Store store, Field.Index index) | 通过指定名称,值将如何被保存在索引中创建一个字段 |
| 9 | Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector) | 通过指定名称,值将如何被保存在索引中创建一个字段 |
| 10 | Field(String name, TokenStream tokenStream) | 创建未存储标记化和索引字段 |
| 11 | Field(String name, TokenStream tokenStream, Field.TermVector termVector) | 创建未存储,任选具有存储术语向量标记化和索引字段 |
类方法
| S.N. | 方法及说明 | 描述 |
|---|---|---|
| 1 | void clearLock(String name) | 尝试清除(强行解锁和删除)指定锁 |
| 2 | Reader readerValue() | 字段作为读取器Reader,或null |
| 3 | void setTokenStream(TokenStream tokenStream) | 设置要用于索引记号流并引起 isIndexed()和 isTokenized()返回 true |
| 4 | void setValue(byte[] value) | 改变这个字段的值 |
| 5 | void setValue(byte[] value, int offset, int length) | 改变这个字段的值 |
| 6 | void setValue(Reader value) | 改变这个字段的值 |
| 7 | void setValue(String value) | 改变这个字段的值 |
| 8 | String stringValue() | 字段作为一个字符串,或 null |
| 9 | TokenStream tokenStreamValue() | 要使用TokesStream 字段建立索引,或者为null。 |
继承的方法
这个类继承了以下类方法:
- org.apache.lucene.document.AbstractField
- java.lang.Object

浙公网安备 33010602011771号