- 浏览: 2049580 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
Lucene索引中有几个最基础的概念,索引(index),文档(document),域(field),和项(或者译为语词term) 字串4
其中Index为Document的序列
字串6
Document为Field的序列 字串8
Field为Term的序列
字串7
Term就是一个子串. 字串7
存在于不同的Field中的同一个子串被认为是不同的Term.因此Term实际上是用一对子串表示的,第一个子串为Field的name,第二个为Field中的子串.既然Term这么重要,我们先来认识一下Term.
字串5
认识Term 字?
最好的方法就是看其源码表示.
字串7
public final class Term implements Comparable, java.io.Serializable { 字串8
String field; 字串8
String text; 字串1
public Term(String fld, String txt) {this(fld, txt, true);}
字串6
public final String field() { return field; }
字串8
public final String text() { return text; }
字串4
//overwrite equals()
字串9
public final boolean equals(Object o) { }
字串3
//overwrite hashCode()
字串5
public final int hashCode() {return field.hashCode() + text.hashCode(); 字串5
} 字串3
public int compareTo(Object other) {return compareTo((Term)other);} 字串5
public final int compareTo(Term other) 字串8
final void set(String fld, String txt) public final String toString() { return field + ":" + text; }
字串6
private void readObject(java.io.ObjectInputStream in)
字串7
} 字串4
从代码中我们可以大体看出Tern其实是一个二元组<FieldName,text> 字串8
倒排索引
为了使得基于项的搜索更有效率,索引中项是静态存储的。Lucene的索引属于索引方式中的倒排索引,因为对于一个项这种索引可以列出包含它的文档。这刚好是文档与项自然联系的倒置。 字串5
Field的类型
Lucene中,Field的文本可能以逐字的非倒排的方式存储在索引中。而倒排过的Field称为被索引过了。Field也可能同时被存储和被索引。Field的文本可能被分解许多Term而被索引,或者就被用作一个Term而被索引。大多数的Field是被分解过的,但是有些时候某些标识符域被当做一个Term索引是很有用的。 字串2
Index包中的每个类解析 字串3
CompoundFileReader
字串4
提供读取.cfs文件的方法. 字串9
CompoundFileWriter
字串3
用来构建.cfs文件,从Lucene1.4开始,会将下面要提到的各类文件,譬如.tii,.tis等合并成一个.cfs文件!
字串4
其结构如下
字串1
Compound (.cfs) --> FileCount, <DataOffset, FileName>FileCount, FileDataFileCount
字串1
FileCount --> VInt
字串2
DataOffset --> Long 字串6
FileName --> String
字串2
FileData --> raw file data 字串9
DocumentWriter
字串4
构建.frq,.prx,.f文件
字串7
1.FreqFile (.frq) --> <TermFreqs, SkipData>TermCount
字串9
TermFreqs --> <TermFreq>DocFreq
字串4
TermFreq --> DocDelta, Freq? 字串2
SkipData --> <SkipDatum>DocFreq/SkipInterval 字串9
SkipDatum --> DocSkip,FreqSkip,ProxSkip 字串4
DocDelta,Freq,DocSkip,FreqSkip,ProxSkip --> VInt
字串5
字串5
字串9
字串6
2.The .prx file contains the lists of positions that each term occurs at within documents. 字串3
ProxFile (.prx) --> <TermPositions>TermCount
字串3
TermPositions --> <Positions>DocFreq 字串8
Positions --> <PositionDelta>Freq 字串5
PositionDelta --> VInt
字串7
字串7
3.There′s a norm file for each indexed field with a byte for each document. The .f[0-9]* file contains, for each document, a byte that encodes a value that is multiplied into the score for hits on that field: 字串4
Norms (.f[0-9]*) --> <Byte>SegSize
字串3
Each byte encodes a floating point value. Bits 0-2 contain the 3-bit mantissa, and bits 3-8 contain the 5-bit exponent. 字串3
These are converted to an IEEE single float value as follows:
字串3
1. If the byte is zero, use a zero float.
字串1
2. Otherwise, set the sign bit of the float to zero; 字串7
3. add 48 to the exponent and use this as the float′s exponent; 字串4
4. map the mantissa to the high-order 3 bits of the float′s mantissa; and 字串7
5. set the low-order 21 bits of the float′s mantissa to zero. 字串6
FieldInfo
字串3
里边有Field的部分信息,是一个四元组<name,isIndexed,num, storeTermVector> 字串1
FieldInfos 字串5
此类用来描述Document的fields是否被索引.每个Segment有一个单独的FieldInfo 文件.对于多线程,此类的对象为线程安全的.但是某一时刻,只允许一个线程添加document.别的reader和writer不允许进入.此类维护两个容器ArrayList和HashMap,这两个容器都不是synchronized,何言线程安全,不解?? 字串4
观察write函数可知 .fnm文件的构成为 字串1
FieldInfos (.fnm) --> FieldsCount, <FieldName, FieldBits>FieldsCount
FieldsCount --> VInt
字串8
FieldName --> String
字串7
FieldBits --> Byte
字串3
FieldReader
字串6
用来读取.fdx文件和.fdt文件
字串4
FieldWriter 字串3
此类创建两个文件.fdx和.fdt文件
字串1
FieldIndex(.fdx)对于每一个Document,里面都含有一个指向Field的指针(其实是整数) 字串1
<FieldValuesPosition>SegSize 字串3
FieldValuesPosition --> Uint64 字串4
则第n个document的Field pointer为n*8 字串9
FieldData(.fdt)里面包含了每一个文档包含的存储的field信息.内容如下: 字串9
<DocFieldData>SegSize 字串1
DocFieldData --> FieldCount, <FieldNum, Bits, Value>FieldCount
字串9
FieldCount --> VInt 字串6
FieldNum --> VInt 字串2
Lucene <= 1.4:
字串9
Bits --> Byte 字串7
Value --> String 字串1
Only the low-order bit of Bits is used. It is one for tokenized fields, and zero for non-tokenized fields. 字串8
FilterIndexReader
字串2
扩展自IndexReader,提供了具体的方法. 字串9
IndexReader 字串7
为abstract class!用来读取建完索引的Directory,并可以返回各种信息,譬如Term,TermPosition等等. 字串7
IndexWriter 字串4
IndexWriter用来创建和维护索引。 字串4
IndexWriter构造函数中的第三个参数决定一个新的索引是否被创建,或者一个存在的索引是否开放给欲新加入的新的document 字串3
通过addDocument()0函数加入新的documents,当添加完document之后,调用close()函数
字串1
如果一个Index没有document需要加入并且需要优化查询性能。则在索引close()之前,调用optimize()函数进行优化。
字串5
Deleteable文件结构:
字串8
A file named "deletable" contains the names of files that are no longer used by the index, but which could not be deleted. This is only used on Win32, where a file may not be deleted while it is still open. On other platforms the file contains only null bytes. 字串4
Deletable --> DeletableCount, <DelableName>DeletableCount
字串7
DeletableCount --> UInt32 字串6
DeletableName --> String 字串1
MultipleTermPositions
字串2
专门用于search包中的PhrasePrefixQuery 字串2
MultiReader 字串8
扩展自IndexReader,用来读取多个索引!添加他们的内容
字串4
SegmentInfo
字串1
一些关于Segment的信息,是一个三元组<segmentname,docCount,dir>
字串8
SegmentInfos 字串6
扩展自Vector,就是一个向量组,其中任意成员为SegmentInfo!用来构建segments文件,每个Index有且只有一个这样的文件,此类提供了read和write的方法.
字串2
其内容如下:
字串5
Segments --> Format, Version, NameCounter, SegCount, <SegName, SegSize>SegCount
字串2
Format, NameCounter, SegCount, SegSize --> UInt32 字串1
Version --> UInt64 字串1
SegName --> String 字串1
Format is -1 in Lucene 1.4. 字串2
Version counts how often the index has been changed by adding or deleting documents.
字串5
NameCounter is used to generate names for new segment files. 字串4
SegName is the name of the segment, and is used as the file name prefix for all of the files that compose the segment′s index.
字串8
SegSize is the number of documents contained in the segment index.
字串1
SegmentMergeInfo
字串9
用来记录segment合并信息. 字串5
SegmentMergeQueue
字串5
扩展自PriorityQueue(按升序排列)
字串7
SegmentMerger 字串2
此类合并多个Segment为一个Segment,被IndexWriter.addIndexes()创建此类对象 字串8
如果compoundFile为True即可以合并了,创建.cfs文件,并且把其余的几乎所有文件全部合并到.cfs文件中!
字串2
SegmentReader 字串3
扩展自IndexReader,提供了很多读取Index的方法
字串1
SegmentTermDocs
字串7
扩展自TermDocs
字串8
SegmentTermEnum
字串8
扩展自TermEnum
字串3
SegmentTermPositions
字串9
扩展自TermPositions
字串8
SegmentTermVector 字串7
扩展自TermFreqVector
字串3
Term
字串9
Term是一个<fieldName,text>对.而Field由于分多种,但是至少都含有<fieldName,fieldValue>这样二者就可以建立关联了.Term是一个搜索单元.Term的text都是诸如dates,email address,urls等等. 字串7
TermDocs 字串1
TermDocs是一个Interface. TermDocs提供一个接口,用来列举<document,frequency>,以共Term使用 字串4
在<document,frequency>对中,document部分给每一个含有term的document命名.document根据其document number进行标引.frequency部分列举在每一个document中term的数量.<document,frequency>对根据document number排序.
字串2
TermEnum 字串3
此类为抽象类,用来enumerate term.Term enumerations 由Term.compareTo()进行排序此enumeration中的每一个term都要大于所有在此enumeration之前的term. 字串6
TermFreqVector 字串8
此Interface用来访问一个document的Field的Term Vector
字串6
TermInfo 字串7
此类主要用来存储Term信息.其可以说为一个五元组<Term,docFreq,freqPointer,proxPointer,skipOffset> 字串4
TermInfoReader 字串9
未细读,待读完SegmentTermEnum 字串7
TermInfoWriter
字串9
此类用来构建(.tis)和(.tii)文件.这些构成了term dictionary
字串9
1. The term infos, or tis file.
字串6
TermInfoFile (.tis)--> TIVersion, TermCount, IndexInterval, SkipInterval, TermInfos 字串4
TIVersion --> UInt32
字串5
TermCount --> UInt64 字串1
IndexInterval --> UInt32
字串9
SkipInterval --> UInt32 字串4
TermInfos --> <TermInfo>TermCount
字串2
TermInfo --> <Term, DocFreq, FreqDelta, ProxDelta, SkipDelta> 字串3
Term --> <PrefixLength, Suffix, FieldNum> 字串5
Suffix --> String 字串2
PrefixLength, DocFreq,FreqDelta, ProxDelta, SkipDelta
--> VInt
字串2
This file is sorted by Term. Terms are ordered first lexicographically by the term′s field name, and within that lexicographically by the term′s text.
字串3
TIVersion names the version of the format of this file and is -2 in Lucene 1.4.
字串8
Term text prefixes are shared. The PrefixLength is the number of initial characters from the previous term which must be pre-pended to a term′s suffix in order to form the term′s text. Thus, if the previous term′s text was "bone" and the term is "boy", the PrefixLength is two and the suffix is "y".
字串8
FieldNumber determines the term′s field, whose name is stored in the .fdt file.
字串6
DocFreq is the count of documents which contain the term.
字串4
FreqDelta determines the position of this term′s TermFreqs within the .frq file. In particular, it is the difference between the position of this term′s data in that file and the position of the previous term′s data (or zero, for the first term in the file). 字串5
ProxDelta determines the position of this term′s TermPositions within the .prx file. In particular, it is the difference between the position of this term′s data in that file and the position of the previous term′s data (or zero, for the first term in the file. 字串6
SkipDelta determines the position of this term′s SkipData within the .frq file. In particular, it is the number of bytes after TermFreqs that the SkipData starts. In other words, it is the length of the TermFreq data. 字串1
2. The term info index, or .tii file.
字串8
This contains every IndexIntervalth entry from the .tis file, along with its location in the "tis" file. This is designed to be read entirely into memory and used to provide random access to the "tis" file.
字串8
The structure of this file is very similar to the .tis file, with the addition of one item per record, the IndexDelta. 字串3
TermInfoIndex (.tii)--> TIVersion, IndexTermCount, IndexInterval, SkipInterval, TermIndices
字串3
TIVersion --> UInt32
字串4
IndexTermCount --> UInt64 字串8
IndexInterval --> UInt32 字串9
SkipInterval --> UInt32
字串6
TermIndices --> <TermInfo, IndexDelta>IndexTermCount
字串9
IndexDelta --> VLong
字串7
IndexDelta determines the position of this term′s TermInfo within the .tis file. In particular, it is the difference between the position of this term′s entry in that file and the position of the previous term′s entry. 字串4
TODO: document skipInterval information
字串7
其中IndexDelta是.tii文件,比之.tis文件多的东西.
字串4
TermPosition
字串3
此类扩展自TermDocs,是一个Interface,用来enumerate<document,frequency,<position>*>三元组,
字串3
以供term使用.在此三元组中document和frequency于TernDocs中的相同.postions部分列出了在一个document中,一个term每次出现的顺序位置此三元组为倒排文档的事件表表示. 字串1
TermPositionVector 字串4
扩展自TermFreqVector.比之TermFreqVector扩展了功能,可以提供term所在的位置
字串1
TermVectorReader 字串9
用来读取.tvd,.tvf.tvx三个文件. 字串9
TermVectorWriter 字串7
用于构建.tvd, .tvf,.tvx文件,这三个文件构成TermVector 字串4
1. The Document Index or .tvx file. 字串6
This contains, for each document, a pointer to the document data in the Document (.tvd) file. 字串7
DocumentIndex (.tvx) --> TVXVersion<DocumentPosition>NumDocs 字串8
TVXVersion --> Int 字串8
DocumentPosition --> UInt64
字串2
This is used to find the position of the Document in the .tvd file.
字串3
2. The Document or .tvd file. 字串3
This contains, for each document, the number of fields, a list of the fields with term vector info and finally a list of pointers to the field information in the .tvf (Term Vector Fields) file. 字串9
Document (.tvd) --> TVDVersion<NumFields, FieldNums, FieldPositions,>NumDocs 字串2
TVDVersion --> Int 字串8
NumFields --> VInt
字串7
FieldNums --> <FieldNumDelta>NumFields
字串5
FieldNumDelta --> VInt 字串8
FieldPositions --> <FieldPosition>NumFields 字串2
FieldPosition --> VLong
字串1
The .tvd file is used to map out the fields that have term vectors stored and where the field information is in the .tvf file. 字串8
3. The Field or .tvf file. 字串5
This file contains, for each field that has a term vector stored, a list of the terms and their frequencies. 字串6
Field (.tvf) --> TVFVersion<NumTerms, NumDistinct, TermFreqs>NumFields 字串3
TVFVersion --> Int 字串7
NumTerms --> VInt 字串9
NumDistinct --> VInt -- Future Use
字串1
TermFreqs --> <TermText, TermFreq>NumTerms
字串7
TermText --> <PrefixLength, Suffix> 字串4
PrefixLength --> VInt
字串6
Suffix --> String 字串5
TermFreq --> VInt
字串2
Term text prefixes are shared. The PrefixLength is the number of initial characters from the previous term which must be pre-pended to a term′s suffix in order to form the term′s text. Thus, if the previous term′s text was "bone" and the term is "boy", the PrefixLength is two and the suffix is "y". 字串4
字串8
好的,整个Index包所有类都讲解了,下边咱们开始来编码重新审视一下! 字串5
下边来编制一个程序来结束本章的讨论。
字串7
package org.apache.lucene.index; 字串7
import org.apache.lucene.analysis.*; 字串1
import org.apache.lucene.analysis.standard.*;
字串3
import org.apache.lucene.store.*;
字串6
import org.apache.lucene.document.*; 字串8
import org.apache.lucene.demo.*; 字串9
import org.apache.lucene.search.*; 字串8
import java.io.*;
字串2
/**在使用此程序时,会尽量用到Lucene Index中的每一个类,尽量将其展示个大家
字串4
*使用的Index包中类有 字串9
*DocumentWriter(提供给用用户使用的为IndexWriter) 字串7
*FieldInfo(和FieldInfos) 字串9
* SegmentDocs(扩展自TermDocs)
字串1
*SegmentReader(扩展自IndexReader,提供给用户使用的是IndexReader)
字串4
*SegmentMerger
字串2
*segmentTermEnum(扩展自TermEnum) 字串2
*segmentTermPositions(扩展自TermPositions)
字串2
*segmentTermVector(扩展自TermFreqVector) 字串5
*/ 字串8
public class TestIndexPackage
字串9
{ 字串1
//用于将Document加入索引 字串8
public static void indexDocument(String segment,String fileName) throws Exception
字串8
{ 字串8
//第二个参数用来控制,如果获得不了目录是否创建 字串5
Directory directory = FSDirectory.getDirectory("testIndexPackage",false); 字串3
Analyzer analyzer = new SimpleAnalyzer(); 字串8
//第三个参数为每一个Field最多拥有的Token个数
字串5
DocumentWriter writer = new DocumentWriter(directory,analyzer,Similarity.getDefault(),1000); 字串4
File file = new File(fileName);
字串7
//由于使用FileDocument将file包装成了Docuement,会在document中创建三个field(path,modified,contents) 字串5
Document doc = FileDocument.Document(file); 字串7
writer.addDocument(segment,doc); 字串9
directory.close();
字串8
}
字串8
//将多个segment进行合并 字串4
public static void merge(String segment1,String segment2,String segmentMerged)throws Exception 字串8
{
字串2
Directory directory = FSDirectory.getDirectory("testIndexPackage",false); 字串5
SegmentReader segmentReader1=new SegmentReader(new SegmentInfo(segment1,1,directory)); 字串6
SegmentReader segmentReader2=new SegmentReader(new SegmentInfo(segment2,1,directory)); 字串8
//第三个参数为是否创建.cfs文件
字串2
SegmentMerger segmentMerger =new SegmentMerger(directory,segmentMerged,false);
字串7
segmentMerger.add(segmentReader1); 字串7
segmentMerger.add(segmentReader2);
字串8
segmentMerger.merge();
字串3
segmentMerger.closeReaders();
字串4
directory.close(); 字串7
} 字串7
//将segment即Index的子索引的所有内容展示给你看。 字串4
public static void printSegment(String segment) throws Exception 字串8
{ 字串2
Directory directory =FSDirectory.getDirectory("testIndexPackage",false);
字串4
SegmentReader segmentReader = new SegmentReader(new SegmentInfo(segment,1,directory)); 字串2
//display documents
字串8
for(int i=0;i<segmentReader.numDocs();i++)
字串2
System.out.println(segmentReader.document(i)); 字串3
TermEnum termEnum = segmentReader.terms();//此处实际为SegmentTermEnum
字串6
//display term and term positions,termDocs 字串5
while(termEnum.next())
字串6
{ 字串1
System.out.print(termEnum.term().toString2()); 字串2
System.out.println(" DocumentFrequency=" + termEnum.docFreq()); 字串2
TermPositions termPositions= segmentReader.termPositions(termEnum.term()); 字串3
int i=0; 字串4
while(termPositions.next()) 字串5
{
字串1
发表评论
-
利用solrj操作solr的API
2015-03-11 11:00 33048使用SolrJ操作Solr会比利用httpClient来操 ... -
Solr高效利用:Solr实现SQL的查询与统计
2015-03-11 10:51 5856Cloudera公司已经推出了基于Hadoop平台的查 ... -
(转)Lucene+SSH
2014-07-01 08:26 1045这篇博客写的不错,支持一下,顶。 http://shuai ... -
打分公式
2011-05-21 16:20 1451文档的分值代表了该文 ... -
queryparser的问题
2011-05-08 17:46 2115很多人在使用lucene时会使用其提供的querypars ... -
MoreLikeThis实现检索相似文档
2011-04-07 11:01 4532输入“related:doc_id”返回索引库中的相关文档 ... -
获取一个索引文件频率最高的Term
2011-04-07 11:00 2040前段时间同事也开始对搜索感兴趣,他看到luk ... -
TermEnum
2011-04-07 10:53 2180使用Lucene的API遍历Lucene ... -
lucene的分组查询
2011-04-07 10:51 1738通过lucene搜索去除相同结果。 在网上找了很久到没有答案 ... -
Lucene中的自定义排序功能
2011-04-07 10:47 1547Lucene中的自定义排序功能和Java集合中的自定义排序的实 ... -
lucene中的词频
2011-04-07 10:46 8422lucene in action作为action系列,确实坚持 ... -
lucene介绍
2011-04-07 10:28 17722009 年 9 月 14 日 本文将探讨 Apache ... -
lucene索引文档
2011-03-02 13:17 1916用Lucene索引文档 接下来我将一步一步的来演示如何利用 ... -
hadoop
2010-12-31 17:24 1993Hadoop的概要介绍 Hadoop,是一个分布式系统基础架 ...
相关推荐
### Lucene基本使用详解 #### 一、概述 在当今数据爆炸的时代,如何从海量的信息中快速找到所需的内容成为了一项重要技能。全文检索技术便应运而生,旨在提高信息检索的效率与准确度。Lucene是一款由Apache基金会...
这个“lucene基本包”包含了Lucene的核心组件,是理解和使用Lucene进行信息检索的基础。 1. **全文检索引擎架构** Lucene的核心理念是建立索引,以便快速查找文档中的信息。它通过将文本数据转换成便于搜索的结构...
本文将深入浅出地介绍Lucene的基本使用,帮助初学者快速上手。 一、Lucene的架构与工作原理 Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。首先,每个文档由一个或多个...
### 一、Lucene基本概念 1. **索引**:Lucene首先对文本进行索引,将文本内容转换为一系列可搜索的结构。索引过程包括分词(Tokenization)、词干提取(Stemming)、停用词处理(Stop Word Removal)等步骤。 2. *...
### 一、Lucene 基本概念 1. **索引(Index)**:Lucene 的核心功能是建立索引,它将非结构化的文本数据转换成可供快速搜索的数据结构。索引过程包括分词(Tokenization)、词干提取(Stemming)、停用词过滤...
一、Lucene基本概念 Lucene是一个开源的Java库,它提供了一个强大的信息检索API,支持索引和搜索大量文本数据。其核心功能包括文档索引、查询解析、评分机制以及结果排序等。通过Lucene,开发者可以快速地构建出...
Lucene基本概念 - **文档(Document)**:在Lucene中,一个文档代表你要索引的信息单元,它可以包含多个字段(Field)。 - **字段(Field)**:字段是文档的组成部分,每个字段都有特定的类型(如文本、日期等)...
1. **Lucene基本概念** - **索引**: Lucene首先需要创建索引,将文本数据转换为可搜索的结构。索引过程包括分析、分词和倒排索引等步骤。 - **分析器**: 分析器负责将输入文本拆分成有意义的单位,即术语(tokens...
1. **Lucene基本组件**: - **索引(Indexing)**: Lucene首先将文档内容转化为可搜索的结构——索引。这个过程包括分词(Tokenization)、词干提取(Stemming)、停用词处理(Stopword Removal)等步骤。 - **...
Lucene基本概念** - **索引(Indexing)**:Lucene首先对文档进行分析和处理,将其转化为结构化的索引数据。这个过程包括分词(Tokenization)、去除停用词(Stopword Removal)、词干提取(Stemming)等。 - **...
### 一、Lucene基本概念 1. **索引(Index)**: Lucene首先将文档内容转换为可搜索的结构化数据,即索引。索引是经过特殊处理的数据结构,允许快速定位到包含特定查询词的文档。 2. **分词(Tokenization)**: ...
### 一、Lucene基本概念 1. **索引(Index)**:Lucene首先将数据转换成索引,这个过程类似于传统书籍的目录。索引包含文档的关键词及其位置信息,使得快速查找和排序变得可能。 2. **文档(Document)**:在...
1. **Lucene基本概念**:Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。文档是由一系列字段组成的,每个字段有特定的类型(如文本、数字等)。索引是Lucene对这些文档进行...
4. **示例(examples)**:演示Lucene基本功能和用法的示例代码,是学习的好起点。 5. **测试代码(test)**:用于单元测试和集成测试的代码,可以帮助理解各个组件的工作原理。 通过研究这些源码和文档,开发者...
1. **Lucene基本概念**:了解Lucene的基本架构,如文档、字段、术语(token)、倒排索引等。这些概念构成了Lucene搜索引擎的基础。 2. **索引创建**:学习如何将文本数据转换为可搜索的Lucene索引,包括分词、分析...
**一、Lucene基本概念** 1. **索引**:在Lucene中,数据不是直接存储的,而是被转换为一种叫做索引的数据结构。索引是经过分析和分词后的文档内容,使得搜索过程可以快速定位到相关的文档。 2. **文档**:在Lucene...
1. **Lucene基本概念** - **全文检索**:Lucene的核心功能是进行全文检索,它能将非结构化的文本数据转换成可搜索的索引。 - **倒排索引**:Lucene采用倒排索引技术,将文档中的词汇与文档ID关联,提高了查询速度...
### 一、Lucene 基本概念 1. **索引(Index)**:搜索引擎的核心是索引,类似于书籍的目录。Lucene 把文档内容转换成倒排索引,使得快速查找匹配的文档变得可能。 2. **文档(Document)**:在 Lucene 中,每个文档...
一、Lucene基本概念 1. 文档(Document):在Lucene中,文档是信息的基本单位,它由多个字段(Field)组成,每个字段有对应的名称和内容。例如,一个网页可以被看作一个文档,其中的标题、正文、URL等可以作为不同...
1. **Lucene基本概念**:理解Lucene的索引结构,如倒排索引,以及其如何提高搜索效率。 2. **数据库集成**:学习如何将MySQL中的数据导入到Lucene的索引中,可能涉及JDBC连接、SQL查询等知识。 3. **索引创建**:...