将所有只用于搜索的,而不需要作为结果的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

solr学习四(关于性能的杂知识)的更多相关文章

  1. Solr学习之二-Solr基础知识

    一 基本说明 简单来说Solr是基于Lucene的高性能的,开源的Java企业搜索服务器.Solr可以看作一个Web app,运行在tomcat或Jetty这类HTTP服务器上, 底层是一个基于Luc ...

  2. Tomcat学习四步走:内核、集群、参数及性能

    主题简介: 内核实现原理 分布式集群 生产部署关键参数 性能监控和分析 一.内核实现原理 HTTP Web服务器与浏览器之间以HTTP协议通信,浏览器要访问服务器即向服务器发送HTTP请求报文. 如图 ...

  3. Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

    上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了.没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的 ...

  4. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  5. Solr学习笔记之1、环境搭建

    Solr学习笔记之1.环境搭建 一.下载相关安装包 1.JDK 2.Tomcat 3.Solr 此文所用软件包版本如下: 操作系统:Win7 64位 JDK:jdk-7u25-windows-i586 ...

  6. 『高性能模型』Roofline Model与深度学习模型的性能分析

    转载自知乎:Roofline Model与深度学习模型的性能分析 在真实世界中,任何模型(例如 VGG / MobileNet 等)都必须依赖于具体的计算平台(例如CPU / GPU / ASIC 等 ...

  7. JVM学习03:性能监控工具

    JVM学习03:性能监控工具 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 性能监控工具知识要点Xmind梳理 案例分析 案例分析1-JPS 案例分 ...

  8. Solr学习之四-Solr配置说明之二

    上一篇的配置说明主要是说明solrconfig.xml配置中的查询部分配置,在solr的功能中另外一个重要的功能是建索引,这是提供快速查询的核心. 按照Solr学习之一所述关于搜索引擎的原理中说明了建 ...

  9. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

随机推荐

  1. ArcGIS API for Silverlight 的重要内容******重要

    ArcGIS Silverlight API:是构建在微软Silverlight平台之上,通过ArcGIS Server Rest API消费ArcGIS Server 服务,同时支持直接消费Bing ...

  2. MSSQL 一坑 SQL Management Studio 管理工具的快捷方式被删掉了

    如果确定已经安装的情况下,到这里去找下吧(我这里用的是sql 2008) C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Co ...

  3. Filters: before, after, around, 常用到before_action,执行顺序是从外到内。

    Filters是继承的,所以可以在ApplicationControlooer中设置filters. 如果有多个过滤,它们执行的顺序 先父类,然后往下推倒到子类 同一个类,按照代码上下顺序执行.

  4. 12月10日 render( locals:{...}) 传入本地变量。

    Jdstor第一部分后台设计,4-4上传图片. 3.4 Using Partials--3.4.4 Passing Local Variables You can also pass local va ...

  5. 4-2 什么是WebSocket; Action Cable的使用。Rails guide-6.3视频教学,没有看!

    WebSocket WebSocket是一种在单个TCP连接上进行全双工通讯的协议.WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范.WebSock ...

  6. 『TensorFlow』通过代码理解gan网络_中

    『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...

  7. 牛客网暑期ACM多校训练营(第三场)DEncrypted String Matching fft

    题意:给你一个解密后的字符串,给你加密方式,加密过程可能出错,字符可能加减1,然后给你一个字符串,要求匹配个数(其实我也不太懂具体怎么加密解密,反正你把给你的前两个字符串用第三个加密一下,然后搞可以有 ...

  8. M爷的线段树

    M爷的线段树 - BUCTOJ 3305 一个长度为n的数列A.修改m次,每次给区间[L,R]中的每一个数加X.查询k次,每次查询第i个元素的值并输出.1<=n<=1e5 ,1<=m ...

  9. Ionic实现自定义返回按键事件

    在 Android 和 Window 平台下,有时候我们需要监听返回按键的事件来进行相应的操作,也就是自定义返回按键事件.下面根据一个例子来讲解如何在 ionic 中自定义返回按键事件. 功能需求 首 ...

  10. 转mysql半主从同步

    MySQL半同步复制 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念   异步复制(Asynchronous replication) ...