
Lucene笔记
无花果有果
即使再小的帆也能远航
展开
-
Lucene使用注意事项
关键词区分大小写 OR AND TO等关键词是区分大小写的,lucene只认大写的,小写的当做普通单词。读写互斥性 同一时刻只能有一个对索引的写操作,在写的同时可以进行搜索文件锁 在写索引的过程中强行退出将在tmp目录留下一个lock文件,使以后的写操作无法进行,可以将其手工删除时间格式 lucene只支持一种时间格式yyMMddHHmmss,所以你传一个yy-MM-dd HH:mm:ss的时间给lucene它是不会当作时间来处理的设置boost 有些时候在搜索时某个字段的权重需要大一些,例如你.原创 2022-05-29 13:39:58 · 427 阅读 · 0 评论 -
Lucene相关度排序
什么是相关度排序Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。如何打分Lucene是在用户进行检索时实时根据搜索的关键字计算出来的,分两步:计算出词(Term)的权重根据词的权重值,计算文档相关度得分。明确索引的最小单位是一个Term(索引词典中的一个词),搜索也是要从Term中搜索,再根据Term找到文档,Term对文档的重要性称为权重,影响Term权重有两个因素:2.1 Term Frequency (tf): 指此Term在此文档中出现了多少次。tf 越大说明原创 2022-05-29 13:37:01 · 612 阅读 · 0 评论 -
Lucene优化
解决大量磁盘IOconfig.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。数值越大索引速度越快, 但是会消耗更多的内存indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段数值越大索引速度越快, 搜索速度越慢; 值越小索引速度越慢, 搜索速度越快更高的值意味着索引期间更低的段合并开销,但同时也意味着更慢的搜索速度,因为此时的索引通常会包含更多的段。如原创 2022-05-29 13:31:43 · 503 阅读 · 0 评论 -
Lucene嵌套查询
Lucene5之前要实现 (a or b) and cBooleanQuery bquery1 = new BooleanQuery();TermQuery tQuery1 = new TermQuery(new Term("xxx", "a"));TermQuery tQuery2 = new TermQuery(new Term("xxx", "b"));TermQuery tQuery3 = new TermQuery(new Term("xxx", "c"));bquery1.add(原创 2022-05-28 22:44:33 · 545 阅读 · 0 评论 -
Lucene获取分词的内容
FSDirectory directory = FSDirectory.open(new File("xxx")); IndexReader indexReader = DirectoryReader.open(directory); String[] fields = {"xxx"}; for (int i = 0; i < fields.length; i++) { Terms ter = MultiFields.getTerms(indexReader, fields[i]);原创 2022-05-28 22:27:41 · 373 阅读 · 0 评论 -
Lucene查询语法
TermQuery 是最常用的查询对象,也是 Lucene 可以使用的许多复杂查询的基础。它用于根据区分大小写的密钥检索文档Query query = new TermQuery(new Term("title","java"));MatchAllDocsQuery匹配所有文档//查询所有文档Query query = new MatchAllDocsQuery();// 相当于查询语法 : *:*TermRangeQuery是用于字符串范围查询的,既然涉及到范围必然需要字符串比.原创 2022-05-28 22:21:17 · 1918 阅读 · 0 评论 -
Lucene索引库维护
添加索引调用 indexWriter.addDocument(doc)添加索引。修改索引更新索引是先删除再添加,建议对更新需求采用此方法并且要保证对已存在的索引执行更新,可以先查询出来,确定更新记录存在执行更新操作。如果更新索引的目标文档对象不存在,则执行添加。@Test public void testIndexUpdate() throws Exception { // 创建分词器 Analyzer analyzer = new StandardAna原创 2022-05-28 20:41:32 · 416 阅读 · 0 评论 -
Lucene的Field域类型
Field属性Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。是否分词(tokenized)是:作分词处理,即将Field值进行分词,分词的目的是为了索引。比如:商品名称、商品描述等,这些内容用户要输入关键字搜索,由于搜索的内容格式大、内容多需要分词后将语汇单元建立索引否:不作分词处理比如:商品id、订单号、身份证号等是否索引(indexed)是:进原创 2022-05-28 19:43:10 · 651 阅读 · 0 评论 -
Lucene搜索过程测试
@Test void testIndexSearch() throws ParseException, IOException { //1.创建分词器(对搜索的关键词进行分词使用) //注意:分词器要和创建索引的适合使用的分词器相同 Analyzer analyzer = new StandardAnalyzer(); //2.创建查询对象,第一个参数:默认查询域,如果查询的关键字中带搜索的域名,则从指定域中查询,如果不带域名则从,默认原创 2022-05-28 17:04:41 · 461 阅读 · 0 评论 -
Lucene创建索引
引入相关jar包 <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.12.1</version> </dependency> <dependency>原创 2022-05-28 16:27:58 · 768 阅读 · 0 评论 -
Lucene搜索理论
搜索理论基础数据查询方法1.顺序扫描法算法描述:所谓排序扫描,例如要找内容包含一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。优点:查询准确率高缺点:查询速度会随着查询数据量的增大,越来越慢使用场景:数据库中的like关键字模糊查询文本编辑器的Ctrl + F查询功能2.倒排索引先举一个例子:例如我们使用新华字典查询汉字,新华字典有偏旁部首的目录(索原创 2022-05-22 20:01:37 · 678 阅读 · 0 评论