`
- 浏览:
81595 次
- 性别:
- 来自:
信阳
-
将所有只用于搜索的,而不需要作为结果的field(特别是一些比较大的field)的stored设置为false
比如我们在solr中index了一篇word,对于这篇word,我们只需要这篇文章的下载地址,而不需要显示word的内容,并且这篇word又比较大。那么就不要stored了。(再仔细一点:我们已经用分析器将这篇word的内容索引了,能对其进行全文搜索了,那就不需要再存储这篇文章了)
多值Field(Multi-valued Fields)
比如一本书有多个作者,怎么办呢?
一种方法是,添加多个同一key,不同value的Field
Document doc = new Document();
for (int i = 0; i < authors.length; i++) {
doc.add(new Field(“author”, authors[i],
Field.Store.YES,
Field.Index.ANALYZED));
}
还一种方法是在一个field字段中存一个数组:
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
docs.add(doc1);
docs.add( doc2 );
server.add(docs);
对数字、日期、时间等进行索引
索引数字
有两种场景:
1.数字嵌入在Text中,例如“Be sure to include Form 1099 in your tax return”,而你想要搜索1099这个词。此时需要选择不分解数字的Analyzer,例如WhitespaceAnalyzer或者StandardAnalyzer。而SimpleAnalyzer和StopAnalyzer会忽略数字,无法通过1099检出。
2.数字式单独的Field,2.9之后,Lucene支持了数字类型,使用NumericField即可:doc.add(new NumericField(“price”).setDoubleValue(19.99));此时,对数字Field使用字典树存储,
可向document中添加一样的NumericField数值,在NumericRangeQuery、NumericRangeFilter中以or的方式支持,但是排序中不支持。因此如果要排序,必须添加唯一的NumericField。
precisionStep控制了扫描精度,越小越精确但速度越慢。
索引日期和时间
方法是:将日期转化为时间戳(长整数),然后按照NumericField进行处理。
或者,如果不需要精确到毫秒,可以转化成秒处理
doc.add(new NumericField(“day”) .setIntValue((int) (new Date().getTime()/24/3600)));
甚至对某一天进行索引而不是具体时间。
Calendar cal = Calendar.getInstance();
cal.setTime(date);
doc.add(new NumericField(“dayOfMonth”)
.setIntValue(cal.get(Calendar.DAY_OF_MONTH)));
优化索引
索引优化可以提升搜索速度,而非索引速度。它指的是将小索引文件合并成几个。
IndexWriter提供了几个优化方法:
optimize():将索引合并为一个段,完成前不会返回。但是太耗费资源。
optimize(int maxNumSegments):部分优化,优化到最多maxNumSegments个段?是优化于上述极端情况的这种,例如5个。
optimize(boolean doWait):通optimize(),但是它将立即返回。
optimize(int maxNumSegments, boolean doWait):同optimize(int maxNumSegments),但是将立即返回。
另外:在优化中会耗费大量的额外空间。即旧的废弃段直到IndexWriter.commit()之后才能被移除。
理解索引过程
总体来说,索引过程为:
1.提取摘要:从原文提取,并创建Document和Field对象。Tika提供了PDF、Word等非文本的文本提取。
2.分析:Analysis,首先对Document的Field进行分解,产生token流,然后经过一系列Filter(如小写化)等。
3.建立索引:通过IndexWriter的addDocument写入到索引中。Lunece使用了反向索引,即“那个Document包含单词X”,而不是“Document包含哪些Word”
索引文件组成
为了保证效率,每个索引由若干segments组成:
_X.cfs 每个segments由若干个cfs组成,X为0,1,2….如果开启了useCompoundFile,则只有一个.cfs文件。
segments_<N>:记载每个分区对应的cfs文件。
每个一段时间后,在调用IndexWriter时,会自动合并这些segment
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
### Solr 学习知识点详解 #### 一、Solr 概述 - **定义**:Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 可以独立运行在 Jetty、Tomcat 等 Servlet 容器中。 -...
本性能测试报告针对的是 Solr 7.0 版本,旨在探讨在不同环境下的读写性能,包括单节点部署和 Solr on HDFS 的集群模式。 在环境准备阶段,我们设置了两种不同的配置: 1. 单节点 Solr 服务器,配置了 15GB 内存和 8...
solr在做检索的时候时常需要得知他的性能参数,此处使用8G内存,双核处理器测试的结果
**SOLR学习指南** Apache SOLR是一款开源的企业级全文搜索引擎,它被广泛应用于网站内容检索、电商商品搜索、文档数据库搜索等领域。SOLR以其高效、可扩展性以及丰富的特性和配置选项而受到广大开发者的青睐。在这...
【Solr 学习资料详解】 Solr 是一个基于 Apache Lucene 的全文搜索服务器,它为企业提供了高效、可扩展的搜索解决方案。Solr 不仅提供了丰富的查询语言,还优化了索引和搜索性能,使得在大型网站、电子商务平台等...
### Solr学习入门教程知识点详解 #### 一、Solr概览 Solr是一个开源的企业级搜索服务器,采用Java作为底层开发语言,具备高度的可扩展性和灵活性。它通过标准的HTTP协议和XML格式进行通信,这意味着即使不精通Java...
solr 学习笔记主要涵盖了 Solr 的基本安装与配置,以及 Solr 服务器复制的配置,这些都是初学者需要掌握的基础知识。 Solr 是一款基于 Lucene 的全文搜索引擎,广泛应用于大数据检索和文本分析。在安装 Solr 时,...
Solr 是一个开源的、高性能的全文检索引擎,基于 Java 开发,常被用于大型网站的搜索系统。本文将围绕给定内容中的关键命令进行详细的解析,主要包括 Solr 的启动、集群管理、数据导入以及配置更新等方面的操作。 #...
solr学习入门经典教程,赶紧学习吧,从solr的搭建讲起,中文分词器的配置
本篇文章将详细探讨Solr的安装运行、添加分词器以及配置方面的知识。 一、安装与运行 1. Solr的运行需要Java环境支持,至少需要JRE 1.6或以上版本。 2. 将`solr.war`文件从`solr-4.x\dist`目录复制到`apache-tomcat...
文档还提供了一个关于SolrJ的介绍,SolrJ是Solr的Java客户端,它支持与Solr服务器的交互。SolrJ还提供了版本兼容性处理、类路径设置、服务器连接设置以及使用嵌入式服务器等功能的指导。 最后,文档还提供了一些...
Solr的多种性能优化技巧,如索引的性能优化、缓存的性能 优化、查询的性能优化、JVM和Web容器的优化,以及操作系统级别的优化。 拓展知识中首先讲解了Solr的一些比较生僻的知识点,如伪域、多语种索引支持、安全认证...
Apache Solr 是一个开源的全文搜索引擎,由Apache软件基金会维护,是Lucene项目的一部分。它提供了高效、可扩展的搜索和导航功能...熟悉这些知识点,可以帮助你更好地利用Apache Solr构建高性能的企业级搜索解决方案。
- **高性能**:Solr使用缓存机制提高查询性能,并支持实时索引,满足高并发需求。 - **丰富的功能**:Solr提供了排序、高亮显示、拼写检查、 faceting(分面搜索)等多种高级搜索功能。 7. **应用场景** - **...
这是我整理的关于Solr的技术培训资料,它包含了关于Solr的基础知识和高级应用,例如分组、分词器、权重等问题,因为本人在学习solr时发现资源太少,所以整理了一些,当然由于本人技术不足,难免知识点不够全面,有...
Solr是Apache软件基金会开发的一款开源全文搜索引擎,它基于Java平台,是Lucene的一个扩展,提供了更为...通过研究其源码,开发者不仅可以学习到搜索引擎的相关知识,还可以提升在大数据处理和分布式系统设计上的技能。
Solr 学习文档简介 Solr 是 Apache 下的一个顶级开源项目,采用 Java 开发,是基于 Lucene 的全文搜索服务。Solr 可以独立运行在 Jetty、Tomcat 等这些 Servlet 容器中。Solr 提供了一个管理界面,通过管理界面可以...
在本篇Solr学习笔记中,我们将探讨Solr的分布式索引功能,这对于处理大量数据和实现高可用性至关重要。Solr的分布式索引能力允许我们跨越多个节点分布和处理索引过程,从而提高索引速度和查询性能。在实际应用中,这...