Lucene 的认识学习

LSTM模型股价波动率预测(含Python代码) 源代码文件可在gzh’finance褪黑素'回复【24012203】获取。 阅读详情

  通过这几天的看书和学习,对 Lucene 有了更进一步的认识,所以总结一下这些天的学习成果把 Lucene 的学习心得也学出来。

1          Lucene 的认识

提到 Lucene 很多人都知道这个开源的搜索工具,其魅力也是很大的。它让我们对搜索引擎的认识不在那么神秘,也不会在觉得百度和 google 的技术多么的高深没测,其实其原理都是一样的,只是他们要做的更好,走的更远罢了。

Lucene 可以对任何的数据做索引和搜索,说这样的话其实不过分,真的就是这样,只要你能处理好这些数据,交给 Lucene 去建立索引它都可以帮你把这些数据给检索出来,是不是很好玩了。真正好玩的地方还在后面呢。

2          Lucene 的学习

前面已经对 Lucene 有了一些了解,现在我们想象它怎么去搜索这些数据呢,如果知道倒排索引,你就知道了,其实 lucene 检索的是它自己建立的索引,从索引中的到数据的指针,从而得到数据。其实就这么简单。

提到索引,现在的索引技术中有:倒排索引、后缀数组和签名文件这三种,其中后缀数组这种技术虽然检索速度也很快,但是它的数据结构构造和维护都是相当麻烦的所以不可取了。我也懒得去看了。至于签名文件嘛,那是 80 年代的玩意了,现在已经过时了。现在可是倒排索引的天下啊!相信百度和 google 都是这种技术。

3          索引的建立

 

我们从索引的建立入手:

我们建立一个 lucene 的索引时必须先建立该索引文件存放的位置,看一下代码:

IndexWriter writer = null;

writer = new IndexWriter("c:\\index", new CJKAnalyzer(), true);

这段代码就时建立一个索引前所必须的操作,先声明这个 IndexWriter ,实例化它你必须传入三个参数。他们分别代表:你要建立索引文件的存放位置、你要使用索引建立的分词方法、是否重新建立索引。这样你就告诉 lucene 我要在 c 盘的 index 目录下建立索引文件,我要使用车东老师的二分词算法做分析器、我要在这个目录下删除以前的索引或任何文件创立我的索引文件。

索引的建立有三种方式,让我一一道来:

1 、 new IndexWriter(new RAMDirectory(), new StandardAnalyzer(), true);

在内存中建立索引,速度最快但是耗资源,而且重启就没了。

2 、 new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true);

在文件系统中建立索引,这里有两个参数,分别是:建立索引的路径、是否要删除当前目录下的文件重新建立索引。

3 、 new IndexWriter("c:\\index", new CJKAnalyzer(), true);

最常见的一种,在制定目录下建立索引,看了源码你就知道这种方法也是用的第二种方式。 Lucene 的源码:

public IndexWriter(String path, Analyzer a, boolean create)

       throws IOException {

 this(FSDirectory.getDirectory(path, create), a, create, true);

  }

我想的没错。

Indexwriter 性能调整参数:

第一个优化的参数 : mergeFactor 这个参数用于控制 lucene 在把索引从内存写入到磁盘上的文件系统时内存最大的 Document 对象的数量。这个数要根据你的计算机设置,默认情况下是 10 。

    第二个优化的参数 : maxMergeFactor 这个参数用来设置当有多少个 Segment 时进行合并操作。当然我们知道当索引文件太多的话其检索的速度就会很慢,所以我们要当文件数量一定时让它进行索引的合并。这样就可以加快索引速度,但是这个值要根据你的情况而定。当文档数量较多时我们将值设大些,当文档数量较少时我们将值设小些。

第三个优化的参数 : minMergeDocs 这个参数用于控制内存中文档的数量。

 

这样我们建立索引已经完成,接下来我们要建立 Document 对象,因为你必须告诉我要搜索什么吧!好了,看看源码:

File file = new File("1.txt");

Document doc = new Document();

doc.add(Field.UnIndexed("filename", file.getName()));

FileInputStream fis = new FileInputStream(file);

byte[] b = new byte[fis.available()];

fis.read(b);

String content = new String(b);

doc.add(Field.Text("content", content));

fis.close();

以上我们就完成了将 1.txt 文件放到我们的 Document 对象了。这里我们用了 Field.Text(); 这样的操作和 doc.add(); 这样的方法建立的。这也是建立索引的必须。

稍微介绍一下 Field ,它就是你要建立索引的字段。它分别有

类型 / 方法

是否分词

是否索引

是否存储

常用实例

Keyword(String,String)

Keyword(String,Date)

否

是

是

电话号码,身份证,人名,地名,日期

Unindexed(String,String)

否

否

是

文档类型,文档名称

UnStored(String,String)

是

是

否

文档的标题和内容

Text(String,String)

是

是

是

文档的标题和内容

Text(String,Reader)

是

是

否

文档的标题和内容

    这样我们要建什么样的索引就对号入座吧,只要最后我们使用 doc.add(Field.Text("content", content)); 把它添加到 Document 中就可以了。

    这时我们的文档已经建立好了,现在就开始向索引中添加文档吧!这里我们使用

writer.addDocument(doc); 来向 Indexwriter 索引中添加构造好的文档。

这样我们是不是就可以说我们已经建立完了索引呢,其实不然,我们还要优化优化,这样才快嘛!对不对?

    writer.optimize(); 这样一句话就可以实现索引优化了,具体的优化过程我就不说了,是不是很简单。但是一定不要忘了哦。调用这个方法时最好建立一个合适的周期。定期进行优化。

    好了,这样我们就完成了索引的建立了。

    下面我们看看缩影的合并吧!

当我们在很多地方建立了很多的索引后,想要合并这些索引我们怎么办呢?

    使用 IndexWriter.assIndexs(New Directory[]{path});

就可以对 path 路径下的索引合并到当前的索引中了。

    下面再看看索引的删除吧!

    有一些过时的索引我们需要删除,怎么办呢?

IndexReader reader = IndexReader.open("c:\\index");

    reader.delete(0);

这样我们就可以按照文档的顺序删除对应的文档了,但是这样不太现实,不对吗?我们怎么会知道文档的顺序呢?

下面我们看看第二中方法:

IndexReader reader = IndexReader.open("c:\\index");

reader.delete(new Term("name","word1"));

reader.close();

按照字段来删除对应的文档,这样合理多了。以后要删除时就按照词条的方式去删除吧 !

索引锁: write.lock , commit.lock.

write.lock 是为了避免几个线程同时修改一个索引文档而设置。当实例一个 indexwrite 时建立和使用 indexReader 删除文档时建立。

Commit.lock 该锁主要在 segment 在建立,合并或读取时生成。

4          Lucene 的搜索

 

以上完成了索引的建立和一些关于索引的知识,但是光有索引是不行的,我们真正要做的检索,这才是我们的关键。现在我们看看 lucene 的检索吧。

认识检索从检索的工具开始吧! IndexSearcher 类是 lucene 用于检索的工具类,我们在检索之前要得到这个类的实例。

第一步我们看以下代码:

IndexSearcher searcher = new IndexSearcher("c:\\index");

创建 IndexSearcher 实例需要告诉 lucene 索引的位置,就是你 IndexWrite 的文件路径。

Query query = null;

Hits hits = null;

query = QueryParser.parse(key1, "name", new StandardAnalyzer());

hits = searcher.search(query);

if (hits != null) {

           if (hits.length() == 0) {

              System.out.println(" 没有找到任何结果 ");

           } else {

              System.out.print(" 找到 ");

              for (int i = 0; i < hits.length(); i++) {

                  Document d = hits.doc(i);

                  String dname = d.get("title");

                  System.out.print(dname + "   " );

              }

           }

       }

}

以上就是一个完整的检索过程,这里我们看见了个 Query 和 Hits ,这两个类就是比较关键的了,我们先从检索结果的 Hits 类说起。

我们使用 Hits 经常使用的几个方法有:

length() :  返回搜索结果的总数量。

Doc(int n) : 放回第 n 个文档。

Id(int n) : 返回第 n 个文档的内部编号。

Sorce(int n) : 返回第 n 个文档的得分。

看见这个 Sorce(int n) 这个方法,是不是就可以联想到搜索引擎的排序问题呢,像百度的推广是怎么做出来的呢 , 可想而知吧,那就说明必定存在一中方法可以动态的改变某片文档的得分。对了, lucene 中可以使用 Document 的 setBoost 方法可以改变当前文档的 boost 因子。

下面我们看看:

Document doc1 = new Document();

doc1.add(Field.Text("contents", "word1 word"));

doc1.add(Field.Keyword("path", "path\\document1.txt"));

 doc1.setBoost(1.0f);

 

  这样我们就在改变了篇文档的评分了,当 boost 的值越大它的分值就越高,其出现的位置就越靠前。

让我们再来看看 lucene 为我们提供的各种 Query 吧。

第一、   按词条搜索 - TermQuery 
query = new TermQuery(new Term("name","word1"));

hits = searcher.search(query);

这样就可以把 field 为 name 的所有包含 word1 的文档检索出来了。

第二、  “与或”搜索 - BooleanQuery

它实际是一个组合 query 看看下面的代码:

query1 = new TermQuery(new Term("name","word1"));

query2 = new TermQuery(new Term("name","word2"));

query = new BooleanQuery();

query.add(query1, false, false);

query.add(query2, false, false);

hits = searcher.search(query);

看看 booleanQuery 的用法吧:

true & true : 表明当前加入的字句是必须要满足的。相当于逻辑与。

false & true : 表明当前加入的字句是不可一被满足的, 相当于逻辑非。

false & false : 表明当前加入的字句是可选的,相当于逻辑或。

true & true : 错误的情况。

Lucene 可以最多支持连续 1024 的 query 的组合。

第三、  在某一范围内搜索 - RangeQuery

IndexSearcher searcher = new IndexSearcher("c:\\index");

     Term beginTime = new Term("time","200001");

     Term endTime = new Term("time","200005");

     Hits hits = null;

     RangeQuery query = null;

     query = new RangeQuery(beginTime, endTime, false);

     hits = searcher.search(query);

RangeQuery 的构造函数的参数分别代表起始、结束、是否包括边界。这样我们就可以按照要求检索了。

第四、  使用前缀检索 - PrefixQuery

这个检索的机制有点类似于 indexOf() 从前缀查找。这个常在英文中使用,中文中就很少使用了。代码如下:

IndexSearcher searcher = new IndexSearcher("c:\\index");

       Term pre1 = new Term("name", "Da");

       query = new PrefixQuery(pre1);

       hits = searcher.search(query);

第五、  多关键字的搜索 - PhraseQuery

可以多个关键字同时查询。使用如下:

query = new PhraseQuery();

       query.add(word1);

       query.add(word2);

       query.setSlop(0);

       hits = searcher.search(query);

       printResult(hits, "'david' 与 'mary' 紧紧相隔的 Document");

       query.setSlop(2);

       hits = searcher.search(query);

       printResult(hits, "'david' 与 'mary' 中相隔两个词的短语 ");

    这里我们要注意 query.setSlop(); 这个方法的含义。

query.setSlop(0);  紧紧相连 (这个的条件比较苛刻)

query.setSlop(2);  相隔

第六、  使用短语缀搜索 - PharsePrefixQuery

使用 PharsePrefixQuery 可以很容易的实现相关短语的检索功能。

实例:

query = new PhrasePrefixQuery();

       // 加入可能的所有不确定的词

Term word1 = new Term("content", "david");

       Term word2 = new Term("content", "mary");

       Term word3 = new Term("content", "smith");

       Term word4 = new Term("content", "robert");

       query.add(new Term[]{word1, word2});

       // 加入确定的词

       query.add(word4);

       query.setSlop(2);

       hits = searcher.search(query);

       printResult(hits, " 存在短语 'david robert' 或 'mary robert' 的文档 ");

第七、  相近词语的搜索 - fuzzyQuery

可以通俗的说它是一种模糊查询。

 

 

实例:

Term word1 = new Term("content", "david");

       Hits hits = null;

       FuzzyQuery query = null;

       query = new FuzzyQuery(word1);

       hits = searcher.search(query);

       printResult(hits," 与 'david' 相似的词 ");

第八、  使用通配符搜索 - WildcardQuery

实例:

IndexSearcher searcher = new IndexSearcher("c:\\index");

       Term word1 = new Term("content", "*ever");

       Term word2 = new Term("content", "wh?ever");

       Term word3 = new Term("content", "h??ever");

       Term word4 = new Term("content", "ever*");

       WildcardQuery query = null;

       Hits hits = null;

       query = new WildcardQuery(word1);

       hits = searcher.search(query);

       printResult(hits, "*ever");

       query = new WildcardQuery(word2);

       hits = searcher.search(query);

       printResult(hits, "wh?ever");     

       query = new WildcardQuery(word3);

       hits = searcher.search(query);

       printResult(hits, "h??ever");     

       query = new WildcardQuery(word4);

       hits = searcher.search(query);

       printResult(hits, "ever*");

    由上可以看出通配符?代便 1 个字符, * 代表 0 到多个字符。

Lucene 现在支持以上八中的搜索方式,我们可以根据需要选择适合自己的搜索方式。当然上面提供的一些可能对英文还是比较有效,中文就不可取了,所以我们开始想想百度,我们只在一个输入框中搜索结果。有了这个疑问我们揭开下一章的讨论吧!

查询字符串的解析:这个就是我们经常在一个输入框中输入我们要检索的文字,交给搜索引擎去帮我们分词。

QueryParser 类就是对查询字符串的解析类。

看看它的用法:

 

query = QueryParser.parse(key1, "name", new StandardAnalyzer());

hits = searcher.search(query);

它直接返回一个 Query 对象。需要传入的参数分别是:

用户需要查询的字符串、需要检索的对应字段名称、采用的分词类。

Analyzer analyzer = new CJKAnalyzer();

String[] fields = {"filename", "content"};

Query query = MultiFieldQueryParser.parse(searchword, fields, analyzer);

Hits hits = searcher.search(query);

QueryParser 的“与” 和 “或”:

QueryParser 之间默认是或,我们想改变为与的话加入以下代码:

QueryParser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);

就可以了。

5          高级搜索技巧

前面我们已经介绍了一般情况下 lucene 的使用技巧,现在我们探讨一下高级搜索的技巧吧!

1、 对搜索结果进行排序:

1) 使用 sort 类排序:

    Sort sort = new Sort();

        hits = searcher.search(query,sort);

这种方式是使用默认的 sort 排序方式进行排序。默认的 sort 排序是按照相关度进行排序。即通过 luence 的评分机制进行排序。

2) 对某一字段进行排序

       Sort sort = new Sort( “ content ” );

      hits = searcher.search(query,sort);

3) 对多个字段进行排序

Sort sort = new Sort(new SortField[]{new SortField("title"),new SortField("contents")});

hits = searcher.search(query,sort);

2、 多域搜索和多索引搜索:

在使用 luecene 时,如果查询的只是某些 terms ,而不关心这些词条到时来自那个字段中时。这时可以使用 MultiFieldQueryParser 类。这个用于用户搜索含有某个关键字是否存在在字段中,他们之间的关系使用 OR 连接。即不管存在在哪一个字段都会显示显示出来。

使用 MultiSearcher 可以满足同时多索引的搜索需求。

Searcher[] searchers = new Searcher[2];

searchers[0] = new IndexSearcher(indexStoreB);

searchers[1] = new IndexSearcher(indexStoreA);

        // 创建一个多索引检索器

Searcher mSearcher = new MultiSearcher(searchers);

3、     对搜索结果进行过滤:

1)    对时间进行过滤

         通常情况下我们对搜索结果要进行过滤显示,即只显示过滤后的结果。

doc.add(Field.Keyword("datefield", DateField.timeToString(now - 1000)));

DateFilter df1 = DateFilter.Before("datefield", now);

2)        查询过滤器

通过查询过滤器可以过滤一部分的信息。

Filter filter = new Filter()

        {

       public BitSet bits (IndexReader reader) throws IOException

          {

            BitSet bitset = new BitSet(5);

            bitset.set (1);

            bitset.set (3);

            return bitset;

          }

        };

        // 生成带有过滤器的查询对象

        Query filteredquery = new FilteredQuery (query, filter);

       // 返回检索结果

        Hits hits = searcher.search (filteredquery);

 

这样我们就可以使用自己定义的过滤方式去过滤信息了。

3)    带缓存的过滤器:

使用待缓存的过滤器我们可以重用过滤功能,如下:

MockFilter filter = new MockFilter();

 CachingWrapperFilter cacher = new CachingWrapperFilter(filter);

        cacher.bits(reader);

以上介绍完了现在学习 luence ,没有太详细的介绍它的实现,因为它对于我们来说是一个工具,既然是工具我们就要会用就可以了。

京东前端200道面试题及参考答案(中) 前端优化是“提升用户体验、降低资源消耗”的核心手段,需围绕“用户感知的性能指标”(如页面加载速度、交互流畅度)展开,覆盖加载优化、渲染优化、代码优化、网络优化、缓存优化、性能监控六大维度,每个维度下有具体可落地的措施,同时需结合项目实际场景(如单页应用、电商首页)选择优化方案。分页组件需通过props接收“数据总量、当前页、每页条数”等基础信息,通过emit触发“页码切换、每页条数变化”的回调(供父组件请求对应页数据),同时定义默认值确保兼容性。核心Props与Emit设计<template> 阅读详情

相关推荐

Qt Creator菜单栏消失的终极修复指南:从快捷键冲突到设置恢复

本文详细解析了Qt Creator菜单栏消失的常见原因及修复方法,包括快捷键冲突排查、配置文件重置和界面模式切换等解决方案。特别针对Qt开发者遇到的菜单栏显示问题,提供了从简单快捷键操作到深度配置修改的全方位指南,帮助用户快速恢复Qt Creator的正常使用。

weixin_27240351的博客 338

Lucene 的学习 【摘】

Lucene 的学习        通过这几天的看书和学习,对 Lucene 有了更进一步的认识,所以总结一下这些天的学习成果把 Lucene 的学习心得也学出来。 1          Lucene 的认识 提到 Lucene 很多人都知道这个开源的搜索工具,其魅力也是很大的。它让我们对搜索引擎的认识不在那么神秘,也不会在觉得百度和 google 的技术多么的高深没测,其实其原理都是

SQ 941

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 313

Lucene搜索功能

Lucene搜索功能实现搜索功能,主要的API 示例:public static void search(String indexDir, String q) throws IOException, ParseException { Directory dir = FSDirectory.open(new File(indexDir)); IndexSearcher

麦子地的专栏 558

NXP S32K1 SPI驱动实战:从配置到DMA传输的完整流程解析

本文深入解析了NXP S32K1系列MCU的SPI驱动开发全流程。基于S32 Design Studio环境,详细阐述了从引脚配置、LPSPI模块初始化,到实现阻塞、中断及DMA三种传输模式的实战代码与配置要点。文章重点剖析了DMA传输的配置细节与性能优化,旨在帮助开发者构建高效、稳定的嵌入式SPI通信,并提供了SPI Flash驱动的综合案例。

blue42的博客 713

从零构建Elasticsearch MCP代理:自然语言查询背后的技术揭秘

本文深入解析如何从零构建Elasticsearch MCP代理,实现自然语言查询的技术架构与实战应用。通过MCP协议与Elasticsearch的结合,系统能够将自然语言转换为精确的DSL查询,提升非技术用户的数据查询效率。文章详细介绍了核心架构、DSL生成引擎、端到端系统搭建及生产环境最佳实践,为开发者提供全面的技术指南。

lll78的博客 875

Lucene6.0学习笔记——常用查询(一)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33854644的博客 158

YOLO26 实战全流程:从数据集标注到端到端无NMS推理(完整版,附ProgLoss核心调参技巧+避坑指南)

本章节是实战经验的精华❌ 数据集标注不规范,导致模型精度低 → ✅ 严格遵守工业级标注规范,标注框紧贴目标边缘,不要漏标/多标;❌ 训练时未使用预训练权重,导致收敛极慢 → ✅ 必须开启,预训练权重能让模型快速收敛;❌ ProgLoss参数调整幅度过大,导致训练崩溃 → ✅ 每次只调整一个参数,幅度±0.02即可,循序渐进;❌ 推理时强行添加NMS参数,画蛇添足 → ✅ YOLO26无需NMS,推理命令中不要加conf/iou参数,否则会降低推理速度;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1141

lucene 搜索详解(4)

搜索流程 搜索代码示例 package com.dongsheng.lucene.dslucene.lucene; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.core.SimpleAnalyzer; import org.apache.lucene.document....

无怨无悔专栏 416

YOLOv13多分支融合机制+SE注意机制 RepVGGBlock_OREPA架构 map提升4.89,召回率提升8.66

本文提出了一种改进的YOLOv13目标检测模型,通过引入RepVGGOREPA模块和重参数化技术,显著提升了模型性能。实验结果表明,采用RepVGGBlock后,mAP提升4.89,召回率提升8.66%。文章详细介绍了模型移植过程,包括创建YOLOv13-REPVGGOREPA配置文件、修改任务处理代码和模块初始化文件,并提供了完整的OREPA模块实现代码。该模块通过多尺度特征融合和SE注意力机制,实现了训练时的丰富表征能力和推理时的高效计算,为YOLO系列模型提供了新的优化思路。

FJN110的博客 2650

沙猫群优化算法(SCSO)详解:从沙漠生存智慧到全局优化引擎

本文详细介绍了沙猫群优化算法(SCSO),这是一种新型元启发式优化算法,灵感来源于沙猫在沙漠环境中的卓越狩猎行为。SCSO通过模拟沙猫的低频探测能力和精确攻击策略,将优化问题转化为搜索和捕获"猎物"的过程。算法核心包括探索阶段(全局搜索)和开发阶段(局部精细搜索),通过灵敏度范围模型和自适应控制参数实现两者的平衡。SCSO具有参数简单、收敛性能好等优点,适用于解决复杂全局优化问题。

qq_42212808的博客 200

Lucene从入门到进阶(6.6.0版本)

Lucene从入门到进阶(6.6.0版本)

starjuly的专栏 1万+

Codex 自定义模型操作指南:CLI 与桌面客户端双端实操

检查版本 codex --version # 预期输出类似:codex-cli 0.133.0-alpha.1 # 如未安装 npm install -g @openai/codex假设你要接入DeepSeek,在# 临时设置(当前终端会话有效)export DEEPSEEK_API_KEY="sk-你的 DeepSeek API Key"# 永久设置(推荐,写入 shell 配置)

篮球界最会写bug的人;程序猿中打球最菜的人。 454

lucene学习总结之_学习Lucene

lucene学习总结之 我目前正在与一个团队合作,开始一个基于Lucene的新项目。 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene,但这是一个有意识的决定。 在这篇文章中,我正在整理一些学习Lucene的资料–希望您会发现它们对您有所帮助,或者可以提示我错过了哪些资料。 项目文件 当然,首选的是出色的项目文档。 它包含所有模块的Javadoc(最重要的...

cunhu2961的博客 181

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Lucene】原理学习路线

基于《Lucene原理与代码分析完整版》,制定了一个系统学习Lucene原理的计划,并将每个阶段的学习内容组织成专栏文章,zero2hero 手搓 Lucene的核心概念和实现细节。

weiliang_Handan的博客 1071

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

有时间学习一下LUCENE

有时间学习一下LUCENE

woyaoyiwanyuexin的博客 134

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

学习Lucene

我目前正在与一个团队合作,开始一个基于Lucene的新项目。 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene,但这是一个有意识的决定。 在这篇文章中,我正在整理一些学习Lucene的资源–希望您对他们有所帮助,或者可以提示我错过了哪些资源。 项目文件 当然,首选的是出色的项目文档 。 它包含所有模块的Javadoc(最重要的模块是core , a...

最佳 Java 编程 143

lucene学习笔记_学习Lucene

lucene学习笔记 我目前正在与一个团队合作,开始一个基于Lucene的新项目。 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene,但这是一个有意识的决定。 在这篇文章中,我正在整理一些学习Lucene的资源–希望您对他们有所帮助,或者可以提示我错过了哪些资源。 项目文件 当然,首选的是出色的项目文档 。 它包含所有模块的Javadoc(最重要的模...

最佳 Java 编程 163

Lucene学习极好的博客

http://qindongliang.iteye.com/blog/1913565

十年饮冰,难凉热血 832

Lucene学习笔记整理

因为项目的要求,自学Lucene接近一个月的时间,期间由

Free_Dou的专栏 846

Lucene学习

《Lucene3.0原理与代码分析》是一本学习Lucene十分好的书。电子版可以直接去作者的博客阅读。作者博客地址:http://blog.youkuaiyun.com/forfuture1978/category/604866.aspx主要分析了Lucene的运行原理,具体内部代码分析都十分明晰。《Lucene in action》是由Lucene的开发者编著,讲了Lucene如何使用以及其中几

hwssz的专栏 515

lucene学习之说在前面的话

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34202952的博客 82

Lucene学习总结

Lucene学习总结

mpk_no1的博客 624

lucene学习资料

最近研究lucene整理下学习资料:

Java与咖啡 242

Lucene 及 Lucene.net 国内外的一些学习资源汇总

目前互联网上关于Lucene 及 Lucene.net 的文章很多,看了一些,感觉绝大部分还是偏向于应用,真正深入探讨其核心算法的文章不是太多,最近打算深入研究一下Lucene.net,把一些关键技术点的核心算法搞清楚。在开始做这个工作之前,先对目前互联网上可以利用的资源做个汇总,算是抛砖引玉吧,还望网友们多来补充,大家共同学习! lucene 官方网站, Luncene.net 官方网站(英文)...

绝影メ之殇 161

lucene学习资料(书籍、视频)

已经使用lucene好一段时间了,整理了一下学习资料,应该是最全的版本了, lucene学习资料(书籍、视频) 希望对后续学习lucene的同学们有所帮助。

shblaze的专栏 926
上一篇: lucene索引删除,恢复,更新
下一篇: Quartz的cron表达式
OnePiece_Sky
博客等级 码龄15年 9粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值