• www.611.com | www.611.com【唯一官网】》》》

  • 发布时间:2016-01-13 03:42 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • www.611.com | www.611.com【唯一官网】》》》

    2.2读出流程

    用户提供查找关键词,颠末analyzer处置惩罚

    1、lucene简介

    1.1 lucene是啥

    Lucene是一个全文查找布局,而不是运用商品因而它并不像http://www.baidu.com/ 或许谷歌 Desktop那么拿来就能用,它仅仅提供了一种器械让你能完结这些商品

    1.2 lucene能做啥

    要回复这个疑问,先要懂得lucene的实质实践上lucene的功用很单一,说究竟,等于你给它多少个字符串,然后它为你提供一个全文查找效劳,看护你你要查找的关键词出现在哪里知道了这个实质,你就能够表现幻想做任何契合这个前提的功课了你能够把站内新闻都索引了,做个资料库;你能够把一个数据库表的多少个字段索引起来,那就不必再忧虑因为“%like%”而锁表了;你也能够写个自个的查找引擎……

    1.3 你该不该遴选lucene

    下面给出一些测验数据,要是你感觉能够遭遇,那么能够遴选

    测验一:250万纪录,300M摆布文本,天生索引380M摆布,800线程下平均处置惩罚时候300ms

    测验二:37000纪录,索引数据库中的两个varchar字段,索引文件2.6M,800线程下平均处置惩罚时候1.5ms

    2、lucene的功课法子

    lucene提供的效劳实践包孕两有些:一入一出所谓入是写入,行将你提供的源(实质是字符串)写入索引或许将其从索引中删去;所谓出是读出,即向用户提供全文查找效劳,让用户能够颠末关键词定位源

    2.1写入流程

    源字符串重要颠末analyzer处置惩罚,包孕:分词,分红一个个单词;去掉落stopword(可选)

    将源中需求的信息参加Document的各个Field中,并把需求索引的Field索引起来,把需求存储的Field存储起来

    将索引写入存储器,存储器能够是内存或磁盘

    对处置惩罚后的关键词查找索引找出对应的Document

    用户依据需求从找到的Document中获取需求的Field

    3、一些需求知道的观点

    lucene用到一些观点,懂得它们的意义,有利于下面的讲解

    3.1 analyzer

    Analyzer 是剖析器,它的效果是把一个字符串按某种规矩差别红一个个词语,并去掉落其间的无效词语,这儿说的无效词语是指英文中的“of”、 “the”,中文中的 “的”、“地”等词语,这些词语在文章中大年夜量出现,可是自身不包孕啥症结信息,去掉落有利于减小索引文件、进步功率、进步射中率

    分词的规矩千变万化,但意图只要一个:按语义差别这点在英文中比照大略完结,因为英文自身等于以单词为单位的,现已用空格分隔;而中文则有需要以某种法子将连成一片的语句差别红一个个词语具体差别法子下面再具体先容,这儿只需懂得剖析器的观点即可

    3.2 document

    用户提供的源是一条条纪录,它们能够是文本文件、字符串或许数据库表的一条纪录等等一条纪录颠末索引往后,等于以一个Document的法子存储在索引文件中的用户进行查找,也因此Document列表的法子回来

    3.3 field

    一个Document能够包孕多个信息域,例如一篇文章能够包孕“标题”、“正文”、“终极修正时候”等信息域,这些信息域等于颠末Field在Document中存储的

    Field有两个特征可选:存储和索引颠末存储特征你能够操控是不是对这个Field进行存储;颠末索引特征你能够操控是不是对该Field进行索引这看起来似乎有些废话,事实上对这两个特征的正确组合很主要,下面举例说明:

    仍因此方才的文章为比如,咱们需求对标题和正文进行全文查找,以是咱们要把索引特征设置为真,一路咱们期望能直接从查找成果中获取文章标题,以是咱们把标题域的存储特征设置为真,可是因为正文域太大年夜了,咱们为了减小索引文件巨细,将正文域的存储特征设置为假,当需求时再直接读取文件;咱们仅仅期望能从查找解果中获取终极修正时候,不需求对它进行查找,以是咱们把终极修正时候域的存储特征设置为真,索引特征设置为假上面的三个域涵盖了两个特征的三种组合,还有一种全为假的没有用到,事实上Field禁绝许你那么设置,因为既不存储又不索引的域是没故意义的

    3.4 term

    term是查找的最小单位,它标明文档的一个词语,term由两有些构成:它标明的词语和这个词语所出现的field

    3.5 tocken

    tocken是term的一次出现,它包孕trem文本和响应的起止偏移,以及一个类型字符串一句话中能够出现屡次一样的词语,它们都用同一个term标明,可是用不一样的tocken,每个tocken符号该词语出现确当地

    3.6 segment

    添加索引时并不是每个document都立即添加到同一个索引文件,它们重要被写入到不一样的小文件,然后再吞并成一个大年夜索引文件,这儿每个小文件都是一个segment

    4、lucene的布局

    lucene包孕core和sandbox两有些,其间core是lucene安稳的中间有些,sandbox包孕了一些附加功用,例如highlighter、各类剖析器

    Lucene core有七个包:analysis,document,index,queryParser,search,store,util

    4.1 analysis

    Analysis包孕一些内建的剖析器,例如按空缺字符分词的WhitespaceAnalyzer,添加了stopwrod过滤的StopAnalyzer,最常用的StandardAnalyzer

    4.2 document

    Document包孕文档的数据布局,例如Document类界说了存储文档的数据布局,Field类界说了Document的一个域

    4.3 index

    Index 包孕了索引的读写类,例如对索引文件的segment进行写、吞并、优化的IndexWriter类和对索引进行读取和删去操作的 IndexReader类,这儿要把稳的是不要被IndexReader这个姓名误导,以为它是索引文件的读取类,实践上删去索引也是由它完结, IndexWriter只关切怎么将索引写入一个个segment,并将它们吞并优化;IndexReader则注重索引文件中各个文档的组织法子

    4.4 queryParser

    QueryParser 包孕懂得析查询语句的类,lucene的查询语句和sql语句有点类似,有各类保留字,依照必定的语法能够构成各类查询 Lucene有许多种 Query类,它们都一连自Query,实行各类特其他查询,QueryParser的效果等于解析查询语句,按顺序调用各类 Query类查找出成果

    4.5 search

    Search包孕了从索引中查找成果的各品种,例如方才说的各类Query类,包孕TermQuery、BooleanQuery等就在这个包里

    4.6 store

    Store包孕了索引的存储类,例如Directory界说了索引文件的存储布局,FSDirectory为存储在文件中的索引,RAMDirectory为存储在内存中的索引,MmapDirectory为运用内存映射的索引

    4.7 util

    Util包孕一些公共器械类,例如时候和字符串之间的变换器械

    5、怎么建索引

    5.1 最大略的能完结索引的代码片断

    IndexWriter writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true);

    Document doc = new Document();

    doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));

    doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED));

    writer.addDocument(doc);

    writer.optimize();

    writer.close();

    下面咱们剖析一下这段代码

    重要咱们创立了一个writer,并指定寄存索引的目录为“/data/index”,运用的剖析器为StandardAnalyzer,第三个参数说明要是现已有索引文件在索引目录下,咱们将掩饰笼罩它们

    然后咱们新建一个document

    咱们向document添加一个field,姓名是“title”,内容是“lucene introduction”,对它进行存储并索引

    再添加一个姓名是“content”的field,内容是“lucene works well”,也是存储并索引

    然后咱们将这个文档添加到索引中,要是有多个文档,能够重复上面的操作,创立document并添加

    添加完统统document,咱们对索引进行优化,优化主如果将多个segment吞并到一个,有利于进步索引速率

    随后将writer封闭,这点很主要

    对,创立索引就这么大略!

    当然你或许修正上面的代码取得更具个性化的效劳

    5.2 将索引直接写在内存

    你需求重要创立一个RAMDirectory,并将其传给writer,代码如下:

    Directory dir = new RAMDirectory();

    IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true);

    Document doc = new Document();

    doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));

    doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED));

    writer.addDocument(doc);

    writer.optimize();

    writer.close();

    5.3 索引文本文件

    要是你想把纯文本文件索引起来,而不想自个将它们读入字符串创立field,你能够用下面的代码创立field:

    Field field = new Field("content", new FileReader(file));

    这儿的file等于该文本文件该布局函数实践上是读去文件内容,并对其进行索引,但不存储

    6、怎么保护索引

    索引的保护操作都是由IndexReader类提供

    6.1 怎么删去索引

    lucene提供了两种从索引中删去document的法子,一种是

    void deleteDocument(int docNum)

    这种法子是依据document在索引中的编号来删去,每个document加进索引后都邑有个仅有编号,以是依据编号删去是一种正确删去,可是这个编号是索引的内部布局,平pt注册送白菜无需申请日咱们不会知道某个文件的编号究竟是几,以是用途不大年夜另一种是

    void deleteDocuments(Term term)

    这种法子实践上是重要依据参数term实行一个查找操作,然后把查找到的成果批量删去了咱们能够颠末这个法子提供一个严峻的查询前提,到达删去指定document的意图

    下面给出一个比如:

    Directory dir = FSDirectory.getDirectory(PATH, false);

    IndexReader reader = IndexReader.open(dir);

    Term term = new Term(field, key);

    reader.deleteDocuments(term);

    reader.close();

    6.2 怎么更新索引

    lucene并没有提供专门的索引更新法子,咱们需求先将响应的document删去,然后再将新的document参加索引例如:

    Directory dir = FSDirectory.getDirectory(PATH, false);

    IndexReader reader = IndexReader.open(dir);

    Term term = new Term(“title”, “lucene introduction”);

    reader.deleteDocuments(term);

    reader.close();

    IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), true);

    Document doc = new Document();

    doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));

    doc.add(new Field("content", "lucene is funny", Field.Store.YES, Field.Index.TOKENIZED));

    writer.addDocument(doc);

    writer.optimize();

    writer.close();

    7、怎么查找

    lucene 的查找适当强壮,它提供了许多辅佐查询类,每个类都一连自Query类,各自完结一种特其他查询,你能够像搭积木一样将它们任意组合运用,完结一些紊乱操作;其他lucene还提供了Sort类对成果进行排序,提供了Filter类对查询前提进行约束你或许会不自觉地拿它跟SQL语句进行比照: “lucene能实行and、or、order by、where、like ‘%xx%’操作吗?”回复是:“当然没疑问!”

    7.1 种种各样的Query

    下面咱们看看lucene究竟准许咱们进行哪些查询操作:

    7.1.1 TermQuery

    重要先容最基础的查询,要是你想实行一个这么的查询:“在content域中包孕‘lucene’的document”,那么你能够用TermQuery:

    Term t = new Term("content", " lucene";

    Query query = new TermQuery(t);

    7.1.2 BooleanQuery

    要是你想这么查询:“在content域中包孕java或perl的document”,那么你能够树立两个TermQuery并把它们用BooleanQuery连接起来:

    TermQuery termQuery1 = new TermQuery(new Term("content", "java");

    TermQuery termQuery 2 = new TermQuery(new Term("content", "perl");

    BooleanQuery booleanQuery = new BooleanQuery();

    booleanQuery.add(termQuery 1, BooleanClause.Occur.SHOULD);

    booleanQuery.add(termQuery 2, BooleanClause.Occur.SHOULD);

    7.1.3 WildcardQuery

    要是你想对某单词进行通配符查询,你能够用WildcardQuery,通配符包孕’?’匹配一个任意字符和’*’匹配零个或多个任意字符,例如你查找’use*’,你或许找到’useful’或许’useless’:

    Query query = new WildcardQuery(new Term("content", "use*");

    7.1.4 PhraseQuery

    你或许对中日关系比照感兴趣,想查找‘中’和‘日’挨得比照近(5个字的距离内)的文章,逾越这个距离的不予斟酌,你能够:

    PhraseQuery query = new PhraseQuery();

    query.setSlop(5);

    query.add(new Term("content ", “中”));

    query.add(new Term(“content”, “日”));

    那么它或许搜到“中日相助……”、“中方和日方……”,可是搜不到“我国某高层引导说日本欠扁”

    7.1.5 PrefixQuery

    要是你想搜以‘中’开始的词语,你能够用PrefixQuery:

    PrefixQuery query = new PrefixQuery(new Term("content ", "中");

    7.1.6 FuzzyQuery

    FuzzyQuery用来查找类似的term,运用Levenshtein算法假定你想查找跟‘wuzza’类似的词语,你能够:

    Query query = new FuzzyQuery(new Term("content", "wuzza");

    你或许获得‘fuzzy’和‘wuzzy’

    7.1.7 RangeQuery

    另一个常用的Query是RangeQuery,你或许想查找时候域从到之间的document,你能够用RangeQuery:

    RangeQuery query = new RangeQuery(new Term(“time”, “”), new Term(“time”, “”), true);

    终极的true标明用闭合区间

    7.2 QueryParser

    看了这么多Query,你或许会问:“不会让我自个组合各类Query吧,太麻烦了!”当然不会,lucene提供了一种类似于SQL语句的查询语句,咱们权且叫它lucene语句,颠末它,你能够把各类查询一句话搞定,lucene会主动把它们查分红小块交给响应Query实行下面咱们对应每种 Query演示一下:

    TermQuery能够用“field:key”法子,例如“content:lucene”

    BooleanQuery中‘与’用‘+’,‘或’用‘ ’,例如“content:java contenterl”

    WildcardQuery依然用‘?’和‘*’,例如“content:use*”

    PhraseQuery用‘~’,例如“content:"中日"~5”

    PrefixQuery用‘*’,例如“中*”

    FuzzyQuery用‘~’,例如“content: wuzza ~”

    RangeQuery用‘[]’或‘{}’,前者标明闭区间,后者标明开区间,例如“time:[ TO ]”,把稳TO差别巨细写

    你能够任意组合query string,完结紊乱操作,例如“标题或正文包孕lucene,而且时候在到之间的文章”能够标明为:“+ (title:lucene content:lucene) +time:[ TO ]”代码如下:

    Directory dir = FSDirectory.getDirectory(PATH, false);

    IndexSearcher is = new IndexSearcher(dir);

    QueryParser parser = new QueryParser("content", new StandardAnalyzer());

    Query query = parser.parse("+(title:lucene content:lucene) +time:[ TO ]";

    Hits hits = is.search(query);

    for (int i = 0; i 8、剖析器

    在前面的观点先容中咱们现已知道了剖析器的效果,等于把语句依照语义切分红一个个词语英文切分现已有了很老练的剖析器: StandardAnalyzer,许多状况下StandardAnalyzer是个不错的遴选甚至你会发明StandardAnalyzer也能对中文进行分词

    可是咱们的焦点是中文分词,StandardAnalyzer能支撑中文分词吗?实践证实是能够的,可是效果并不好,查找“要是” 会把“牛奶不要是汁好喝”也查找出来,而且索引文件很大年夜那么咱们手头上还有啥剖析器能够运用呢?core里边没有,咱们能够在sandbox里边找到两个: ChineseAnalyzer和CJKAnalyzer可是它们一样都有分词禁绝的疑问比照之下用StandardAnalyzer和 ChineseAnalyzer树立索引时候差不多,索引文件巨细也差不多,CJKAnalyzer表现会差些,索引文件大年夜且耗时比照长

    要办理疑问,重要剖析一下这三个剖析器的分词法子StandardAnalyzer和ChineseAnalyzer都是把语句按单个字切分,也等于说 “牛奶不要是汁好喝”会被它们切分红“牛 奶 不 如 果 汁 好 喝”;而CJKAnalyzer则会切分红“牛奶 奶不 不如 要是 果汁 汁好好喝”这也就讲解了为啥查找“果汁”都能匹配这个语句

    以上分词的缺陷至少有两个:匹配禁绝确和索引文件大年夜咱们的方针是将上面的语句分化成 “牛奶 不如 果汁好喝”这儿的症结等于语义辨认,咱们怎么辨认“牛奶”是一个词而“奶不”不是词语?咱们很自然会想到根据词库的分词法,也等于咱们先获得一个词库,里边枚举了大年夜有些词语,咱们把语句按某种法子切分,当获得的词语与词库中的项匹配时,咱们就以为这种切分是正确的这么切词的进程就改变成匹配的进程,而匹配的法子最大略的有正向最大年夜匹配和逆向最大年夜匹配两种,说白了等于一个从语句开始向落后行匹配,一个从语句结尾向提高行匹配根据词库的分词词库异常主要,词库的容量直接影响查找成果,在一样词库的条件下,据说逆向最大年夜匹配优于正向最大年夜匹配

    当然还有其他分词法子,这自身等于一个学科,我这儿也没有深入研讨回到具体运用,咱们的方针是能找到老练的、现成的分词器械,防止从头创造车轮颠末网上查找,用的比照多的是中科院的 ICTCLAS和一个不开放源码可是免费的JE-AnalysisICTCLAS有优优捕鱼娱乐城个疑问是它是一个动态链接库, java调用需求当地法子调用,未便利也有安然隐患,而且口碑也切实着实不大年夜好JE-Analysis效果还不错,当然也会有分词禁绝确当地,比照比照便利定心

    9、功用优化

    不停到这儿,咱们仍是在评论怎么使lucene跑起来,完结指定任务运用前面说的也切实着实能完结大年夜有些功用可是测验标明lucene的功用并不是极好,在大年夜数据量大年夜并发的前提下甚至会有半分钟回来的状况其他大年夜数据量的数据初始化树立索引也是一个异常耗时的进程那么怎么进步lucene的功用呢?下面从优化创立索引功用和优化查找功用两方面先容

    9.1 优化创立索引功用

    这方面的优化路径比照有限,IndexWriter提供了一些接口能够操控树立索引的操作,其他咱们能够先将索引写入RAMDirectory,再批量写入FSDirectory,不管若何,意图都是只管即便少的文件IO,因为创立索引的最大年夜瓶颈在于磁盘IO其他遴选一个较好的剖析器也能进步一些功用

    9.1.1 颠末设置IndexWriter的参数优化索引树立

    setMaxBufferedDocs(int maxBufferedDocs)

    操控写入一个新的segment前内存中保留的document的数目,设置较大年夜的数目能够加速建索引速率,默以为10

    setMaxMergeDocs(int maxMergeDocs)

    操控一个segment中能够保留的最大年夜document数目,值较小有利于追加索引的速率,默许Integer.MAX_VALUE,无需修正

    setMergeFactor(int mergeFactor)

    操控多个segment吞并的频率,值较大年夜时树立索引速率较快,默许是10,能够在树立索引时设置为100

    9.1.2 颠末RAMDirectory缓写进步功用

    咱们能够先把索引写入RAMDirectory,到达必定命量时再批量写进FSDirectory,减少磁盘IO次数

    FSDirectory fsDir = FSDirectory.getDirectory("/data/index", true);

    RAMDirectory ramDir = new RAMDirectory();

    IndexWriter fsWriter = new IndexWriter(fsDir, new StandardAnalyzer(), true);

    IndexWriter ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);

    while (there are documents to index)

    {

    ... create Document ...

    ramWriter.addDocument(doc);

    if (condition for flushing memory to disk has been met)

    {

    fsWriter.addIndexes(new Directory[] { ramDir });

    ramWriter.close();

    ramWriter = new IndexWriter(ramDir, new StandardAnalyzer(), true);

    }

    }

    9.1.3 遴选较好的剖析器

    这个优化主如果对磁盘空间的优化,能够将索引文件减小快到一半,一样测验数据下由600M减少到380M可是对时候并没有啥帮忙,甚至会需求更永劫候,因为较好的剖析器需求匹配词库,会耗损更多cpu,测验数据用StandardAnalyzer耗时133分钟;用MMAnalyzer耗时150分钟

    9.2 优化查找功用

    只管树立索引的操作异常耗时,可是那究竟只在开初创马上才需求,寻常仅仅少数的保护操作,更何况这些能够放到一个后台进程处置惩罚,并不影响用户查找咱们创立索引的意图等于给用户查找,以是查找的功用才是咱们最关切的下面就来评论争论一下怎么进步查找功用

    9.2.1 将索引放入内存

    这是一个最直不雅的主见,因为内存比磁盘快许多Lucene提供了RAMDirectory能够在内存中包涵索引:

    Directory fsDir = FSDirectory.getDirectory(“/data/index/”, false);

    Directory ramDir = new RAMDirectory(fsDir);

    Searcher searcher = new IndexSearcher(ramDir);

    可是实践证实RAMDirectory和FSDirectory速率差不多,当数据量很小时两者都异常快,当数据量较大年夜时(索引文件400M)RAMDirectory甚至比FSDirectory还要慢一点,这切实着实让人出人料想

    Lucene入门

    而且lucene的查找异常耗内存,即便将400M的索引文件载入内存,在运转一段时候后都邑out of memory,以是小我以为载入内存的效果并不大年夜

    9.2.2 优化时候规模约束

    已然载入内存并不能进步功率,必定有其它瓶颈,颠末测验发明最大年夜的瓶颈居然是时候规模约束,那么咱们能够若何使时候规模约束的代价最小呢?

    当需求查找指准时候规模内的成果时,能够:

    1、用RangeQuery,设置规模,可是RangeQuery的完结实践上是将时候规模内的时候点打开,构成一个个BooleanClause参加到 BooleanQuery中查询,因而时候规模不或许设置太大年夜,经测验,规模逾越一个月就会抛 BooleanQuery.TooManyClauses,能够颠末设置 BooleanQuery.setMaxClauseCount (int maxClauseCount)扩展,可是扩展也是有限的,而且随着maxClauseCount扩展,占用内存也扩展

    2、用 RangeFilter替代RangeQuery,经测验速率不会比RangeQuery慢,可是依然有功用瓶颈,查询的90%以上时候耗损在 RangeFilter,研讨其源码发明RangeFilter实践上是重要遍历统统索引,天生一个BitSet,符号每个document,在时候规模内的符号为true,不在的符号为false,然后将成果通报给Searcher查找,这是异常耗时的

    3、进一步进步功用,这个又有两个思路:

    a、缓存Filter成果已然RangeFilter的实行是在查找之前,那么它的输入都是必定的,等于IndexReader,而 IndexReader是由Directory决议的,以是能够以为RangeFilter的成果是由规模的高低限决议的,也等于由具体的 RangeFilter目标决议,以是咱们只要以RangeFilter目标为键,将filter成果BitSet缓存起来即可lucene API 现已提供了一个CachingWrapperFilter类封装了Filter及其成果,以是具体施行起来咱们能够 cache CachingWrapperFilter目标,需求把稳的是,不要被CachingWrapperFilter的姓名及其说明误导, CachingWrapperFilter看起来是有缓存功用,但的缓存是对付同一个filter的,也等于在你用同一个filter过滤不一样 IndexReader时,它能够帮你缓存不一样IndexReader的成果,而咱们的需求恰好相反,咱们是用不一样filter过滤同一个 IndexReader,以是只能把它作为一个封装类

    Lucene入门

    b、下降时候精度研讨Filter的功课道理能够看出,它每次功课都是遍历整个索引的,以是时候粒度越大年夜,比照越快,查找时候越短,在不影响功用的状况下,时候精度越低越好,无意偶尔甚至献身一点精度也值得,当然最佳的状况是根基?底细不作时候约束

    下面对付上面的两个思路演示一下优化成果(都选用800线程随机关键词随即时候规模):

    第一组,时候精度为秒:

    法子 直接用RangeFilter 运用cache 不必filter

    平均每个线程耗时 10s 1s 300ms

    第二组,时候精度为天

    法子 直接用RangeFilter 运用cache 不必filter

    平均每个线程耗时 900ms 360ms 300ms

    由以上数据能够得出结论:

    1、 只管即便下降时候精度,将精度由秒换整天带来的功用进步甚至比运用cache还好,最佳不运用filter

    2、 在不能下降时候精度的状况下,运用cache能带了10倍摆布的功用进步

    9.2.3 运用异常好的剖析器

    这个跟创立索引优化事理差不多,索引文件小了查找自然会加速当然这个进步也是有限的较好的剖析器相对付最差的剖析器对功用的提升在20%以下

    10、一些经历

    10.1关键词差别巨细写

    or AND TO等关键词是差别巨细写的,lucene只认大年夜写的,小写的作为一样平常单词

    10.2 读写互斥性

    同一时候只能有一个对索引的写操作,在写的一路能够进行查找

    10.3 文件锁

    在写索引的进程中强行退出将在tmp目录留下一个lock文件,使往后的写操作无法进行,能够将其手艺删去

    10.4 时候格局

    lucene只支撑一种时候格局yyMMddHHmmss,以是你传一个yy-MM-dd HH:mm:ss的时候给lucene它是不会算作时候来处置惩罚的

    10.5 设置boost

    有些时分在查找时某个字段的权重需求大年夜一些,例如你或许以为标题中出现关键词的文章比正文中出现关键词的文章更有代价,你能够把标题的boost设置的更大年夜,那么查找成果会优先显现标题中出现关键词的文章(没有运用排序的前题下)运用法子:

    Field. setBoost(float boost);默许值是1.0,也等于说要添加权重的需求设置得比1大年夜

    文章转自:http://www.zhaozongjie.cn/post/66

  • 相关内容

友情链接: