1、对于按创建时间的排序可以使用doc.id的方式
new SortField(null, SortField.DOC, reverse)排序方式尽量使用INT类型的字段
也就是按照写入索引的顺序排序
2、对于时间字符串的排序可以转换成整数进行排序
3、去掉不必要的parse
使用TermQuery替换
4、TermQuery和Term可以只保留一个实例
createTerm(text)
5、减少Doc到model的转换
索引出来String到Date的转换多余而且费时
直接使用Doc对象包装成JSONObject
6、MultiFieldQueryParser改成自己用boolean查询重构
7、减少请求参数的包装类
8、搜索排序方法可以作为常量
将sort参数变成int型,使用swich进行判断
10、使用HitCollector类来适应不同情况下,Hits的大小
新、旧接口
相关搜索接口
11、使用尽可能快的磁盘IO
12、日志,先写文件,每天批量入库
13、增量索引使用reopen
新的reopen()方法只会加载那些变更过的索引片断,而不是重新加载完整的索引。
14、setMergeFactor 在做实时索引的时候,可以设置的小一点
这样就会及时索引进去
索引
索引
1、t.termText()替换为new String(t.termBuffer(),0,t.termLength())
2、StringReader 和TokenStream对象都需要close
3、索引时Document只用一个、Field只用几个
一个Document对象对应多个Field实例
Field有新的setValue方法,动态改变属性
不能只有一个Field实例
例如:idField, bodyField
必须等Document都到索引中之后,才可以重新设置值
4、索引中Field的命名只使用2个字符表示
5、有些索引字段可以考虑使用0,1替代字符串,排序采用整数来排
6、减少索引的存储字段,一般只存ID
7、索引的时候只用一个IndexWriter对象
8、3.1版本有个新的方法writer.ramSizeInBytes()
根据RAM的使用情况,来决定是不需要刷新到磁盘。
之前:setMaxBufferedDocs
9、批量索引的时候,尽可能多使用一些内存,采用非复合的文件方式,完成后集中优化合并索引文件
fsWriter.addIndexesNoOptimize
fsWriter.setUseCompoundFile(false);
需要注意不要超过系统的允许打开文件数
10、重复使用单一的Token实例,在analyzer中。
11、Turn off auto-commit if there are stored fields and term vectors
设置autoCommit=false,直到writer close之后才会生效
默认是true
12、如果总是同时在多个分词的字段中查询,可以考虑将多个Field合并到一个Field中
13、增加mergeFactor,但是不要太大
反复调试获取经验值
14、关闭一些实际上没用的功能(不要存储一些不必要的字段,尽量不要打开term vectors)
15、使用更快的analyzer
16、加快获得document数据的速度
比如:从数据库、文件获取数据的速度
17、索引的时候可以考虑使用多线程
使用多线程addDocuments
需要测试,然后确定线程数
18、可以分开索引,然后合并
并行索引机制
分享到:
相关推荐
2. 基于内存的缓存:为了提高搜索效率,Lucene允许在内存中缓存部分索引,如TermFreqVector,这可以显著提升查询速度。 3. 近实时搜索:通过NRT(Near Real Time)机制,Lucene可以在短时间内反映出对索引的最新...
优化字段类型,例如,对于非全文搜索的字段,可以设置为不分词的TextField,以减少索引空间和提高搜索速度。另外,定期重建索引,以消除旧的和不必要的数据。 #### 3.5 查询优化 合理使用查询语法,避免复杂的查询...
文章中的新闻搜索引擎通过使用Lucene的API,相比普通搜索引擎,提高了搜索的精确性。 8. 新闻搜索引擎的改进 新闻搜索引擎的构建过程中,可以针对新闻内容的特点进行优化,比如增加时间因子权重、优化关键词提取...
2. **索引优化**:针对财经信息的特点,可能需要调整Lucene的配置参数,如缓存大小、分词策略等,以提高搜索性能。 3. **结果排序与展示**:除了Lucene的基本评分,还可以根据用户行为、时间戳等因素自定义排序算法...
此过程中,文档会被分词、去噪、标准化等处理,以提高搜索效率和准确性。索引建立过程是耗时的,尤其是对于大规模的数据集来说,但这是一次性的操作,一旦完成,即可用于后续的快速搜索。 - **查询处理**:用户...
4. **结果相关性**: 考虑用户行为、地理位置等因素,调整评分公式,提高搜索结果的相关性。 5. **拼音和同义词支持**: 引入拼音库和同义词库,提高对中文模糊搜索的支持。 总之,Lucene站内搜索提供了一套强大且...
Lucene是一个高性能、全文本搜索库,它提供了一个强大的文本检索框架,使得开发者能够为他们的应用程序添加高级搜索功能。多短语搜索是指在查询中包含两个或更多相邻词的短语,它比单个词的搜索更为精确,有助于用户...
3. **Directory**:存储索引的地方,Lucene提供两种类型的Directory,FSDirectory用于磁盘存储,RAMDirectory用于内存存储,前者是更常见的选择,但在某些情况下,内存索引可以提高性能。 4. **Analyzer**:负责对...
当用户输入查询时,Lucene会快速定位到包含这些查询词的文档,从而提供高效的搜索性能。 对于中文搜索,Lucene需要处理中文分词问题。中文不同于英文,单词之间没有明显的分隔符,因此需要借助中文分词器(如jieba...
7. **优化性能**:根据需求考虑使用倒排索引、分词器的选择、缓存策略等手段来提高搜索性能。 8. **实时更新**:当数据库中的数据发生变化时,需要同步更新Lucene索引。可以设置监听器或者定时任务来实现。 9. **...
索引优化则是一次性合并多个段(segments)的过程,以提高搜索性能。 5. **搜索结果相关性** Lucene通过TF-IDF(Term Frequency-Inverse Document Frequency)算法计算文档的相关性。TF-IDF评估一个词项在文档中的...
- **性能优化**:通过合理设计索引结构和查询策略,可以进一步提高搜索效率。例如,可以使用分词器对文档进行预处理,提取关键词,并存储在索引中,便于快速匹配和检索。 #### 结合Ajax与Lucene构建搜索引擎的步骤 ...
在C#环境下,利用Lucene进行时间区间搜索是提高数据检索效率和精确度的重要手段。本篇将深入探讨如何在C#中实现Lucene的时间区间查询匹配,以及涉及的相关技术点。 首先,我们需要了解Lucene的基本操作流程,包括...
Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、可扩展的信息检索库,为开发者提供了强大的文本搜索功能。而Ajax(Asynchronous JavaScript and XML)则是一种在无需重新加载整个网页的情况下,...
- 采用索引机制提高搜索速度。 - 在大数据量环境下表现更优。 #### 三、Lucene简介及其架构 1. **Lucene简介**: - Lucene是一款高性能、全功能的全文检索引擎库。 - 适用于多种编程语言,但最初为Java设计。 ...
同时,为了提高性能,可以使用分布式索引、多线程索引和内存缓存等技术。 六、实际应用 基于LUCENE的搜索引擎可应用于各种场景,如企业内部知识库的检索、网站内容搜索、邮件搜索等。通过学习和掌握LUCENE,开发者...
这样,在查询时,用户输入的拼音也能匹配到相应的汉字内容,从而提高搜索效率。 实现拼音搜索的关键步骤如下: 1. **预处理**:在索引文档时,需要对文本进行预处理,将每个汉字转换为对应的拼音。这个过程通常...
- **缓存优化**: 利用内存缓存提高搜索速度。 - **近实时搜索**: Lucene支持近乎实时的搜索,即使在索引更新后,搜索结果也能快速反映变化。 综上所述,"Lucene搜索引擎 JSP + JAVA"项目展示了如何结合这三个强大的...