lucene

Creating custom FunctionQuery in Solr

喜夏-厌秋 提交于 2020-03-05 01:30:56
问题 I want to create a custom Solr FunctionQuery so that I would be able to get the actual length of field (in terms). The results might look like this : { "responseHeader":{ "status":0, "QTime":8, "params":{ "q":"python", "indent":"on", "fl":"title,score,[features efi.query=python store=myfeature_store]", "wt":"json"}}, "response":{"numFound":793,"start":0,"maxScore":0.33828905,"docs":[ { "title":"Newest 'python' Questions - Stack Overflow", "score":0.33828905, "[features]":"titleLength=5"}, ] }

java知识点 --- 类加载器

泄露秘密 提交于 2020-03-05 00:14:52
一、什么是类的加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。   类的加载指的是将类从“.java”代码文件编译成的“.class”字节码文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区(HotSpot虚拟机在方法区中)创建一个 java.lang.Class 对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 Class 对象, Class 对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。      一般情况在你的代码中用到这个类的时候,才会加载这个类,但是类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误(LinkageError错误)如果这个类一直没有被程序主动使用,那么类加载器就不会报告错误。 二、类的生命周期   类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括: 加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)

Lucene4.3开发之第三步之温故知新(三)

自古美人都是妖i 提交于 2020-03-02 07:17:35
本篇就对lucene的基本知识进行一个总结,以便于加深对lucene基本api组件的理解。 1、IndexWriter:是索引过程的核心类,主要负责创建索引或者打开已有索引,提供索引的增删改等操作。 2、IndexWriterConfig:这个api在低版本的lucene中是没有此配置类的,这个类也比较重要,使用此类则需要在其构造方法中传入2个参数,第一个参数是lucene当前的版本号,第二个是索引使用的分词器,除了这个我们最常用的功能,里面还提供了大量工具方法,例如,设置内存里缓冲大小,以及是否开启复合索引的等等一系列,可以对索引做一些基本的配置优化等信息。 3、Directory:这个类代表了lucene索引的存放位置,是一个抽象类,它有一系列子类可以用来处理索引,使用不同的子类对于系统的性能,影响会很大,但归其本质上,提升性能,无非就拿空间换时间,或拿时间换空间两种情况,在具体使用时,我们可以使用其子类来获取索引所在的存储路径,然后将其传给IndexWriter类构造方法里。 4、Analyzer:这个类也是所有分析器的基类,文本文件在索引前,需要经过分析器处理,处理成对的语汇单元,统一格式,它能提取有效的信息,过滤掉一些禁用词。lucene自带有几个分析器,但大部分都是对英文或欧洲语言处理的,如果想要使用中文的分词器,可以使用自带的SmartCN分词器,也可以使用开源IK

lucene quickstart-基本检索

五迷三道 提交于 2020-03-01 21:20:25
有了上一篇建立的索引,就可以进行检索了。 数据库查询使用SQL,lucene检索使用Query。 lucene提供了一个IndexSearcher类,检索的功能通过这个类完成,其构造方法需要一个IndexReader对象。IndexReader用于读取索引库Directory。 IndexSearcher有许多重构的方法,其中返回值为TopDocs类型的为最简单的。本文使用这个方法进行演示。TopDocs保存检索结果,其中的scoreDocs属性保存了记录的docId及评分,根据docId就可以取得对应的记录。 上一篇中已经知道初始化Directory对象需要索引库的路径,我们提供一个Searcher类,简化索引的操作。 伪代码如下: public class Searcher { /** * 检索 * * @param indexDir * 索引存放目录 * @param query * 检索条件 * @param n * 返回结果数量 * @return * @throws Exception */ public List<Document> search(String indexDir, Query query, int n) throws Exception { 创建Directory对象; 创建IndexReader对象; 创建IndexSearcher对象;

Lucene-全文检索

佐手、 提交于 2020-03-01 21:02:28
全文检索   数据分类       结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。针对结构化数据的搜索,列如对数据库的搜索,可以使用SQL语句。再如对元数据的搜索,列如Windows中对文件名,类型和修改时间进行搜索等;       非结构化数据:指不定长或没有固定格式的数据,例如邮件,word文档等。对非结构化数据的搜索,例如Windows中对文件内容的搜索,Linux中grep命令,以及使用Google或百度来搜索内容都属于对全文数据的搜索;       对结构化的数据,可以使用搜索算法按照结构较快地进行检索;       但是对非结构化的数据,由于没有特定结构,因此在数据量比较小的时候,可以使用顺序扫描法,一个文件一个文件地找,找到包含检索字符串的文件。如Windows文件搜索,Linux中grep命令。这样的方法对于数量较小的比较直接,但是对于数据量较大的文件检索效率较低。   结构化数据搜索     常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且很快的得到查询结构。   非结构化数据查询方法     顺序扫描法(Serial Scanning)       所谓顺序扫描法,比如要找内容包含某一个字符串的文件,就是一个一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串

java计算对象占用内存大小:lucene专用于计算堆内存占用大小的工具类

杀马特。学长 韩版系。学妹 提交于 2020-03-01 13:12:51
RamUsageEstimator,maven坐标: <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>4.0.0</version> </dependency> RamUsageEstimator就是根据java对象在堆内存中的存储格式, 通过计算Java对象头、实例数据、引用等的大小,相加而得,如果有引用,还能递归计算引用对象的大小。 RamUsageEstimator的源码并不多,几百行,清晰可读。这里不进行一一解读了。 它在初始化的时候会根据当前JVM运行环境、CPU架构、运行参数、是否开启指针压缩、JDK版本等综合计算对象头的大小,而实例数据部分则按照java基础数据类型的标准大小进行计算。 思路简单,同时也在一定程度上反映出了Java对象格式的奥秘! import java.util.List; import java.util.concurrent.atomic.AtomicLong; import lombok.extern.slf4j.Slf4j; import org.apache.lucene.util.RamUsageEstimator; import reactor.fn.tuple.Tuple2; import

Lucene的索引文件格式(1)

醉酒当歌 提交于 2020-03-01 03:38:39
Lucene学习总结之三:Lucene的索引文件格式(1) Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 一、基本概念 下图就是Lucene生成的索引的一个实例: Lucene的索引结构是有层次结构的,主要分以下几个层次: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments.gen和segments_5是段的元数据文件,也即它们保存了段的属性信息。 文档(Document): 文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。 新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中。 域(Field):

Lucene学习总结之三:Lucene的索引文件格式(1)

徘徊边缘 提交于 2020-03-01 03:19:14
【转载 http://www.cnblogs.com/forfuture1978/archive/2009/12/14/1623597.html 】 Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙。 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程,就是按照全文检索的基本过程,将倒排表写成此文件格式的过程。 Lucene的搜索过程,就是按照此文件格式将索引进去的信息读出来,然后计算每篇文档打分(score)的过程。 本文详细解读了Apache Lucene - Index File Formats( http://lucene.apache.org/java/2_9_0/fileformats.html ) 这篇文章。 一、基本概念 下图就是Lucene生成的索引的一个实例: Lucene的索引结构是有层次结构的,主要分以下几个层次: 索引(Index): 在Lucene中一个索引是放在一个文件夹中的。 如上图,同一文件夹中的所有的文件构成一个Lucene索引。 段(Segment): 一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不同的段可以合并。 如上图,具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。 segments

Lucene与HBase的组合使用及HBasene的分析报告

孤街浪徒 提交于 2020-03-01 03:14:16
Lucene简介   Lucene中,以document的形式作为搜索的主体。document由fieldName和fieldValue所组成,每个fieldValue又可以由一个或多个term元素来组成。基于不同的分词及索引规则,可用于搜索fieldValue的term少于组成fieldValue的term。Lucene的搜索基于反向索引,包含着可用于搜索document的field信息。通过Lucene,可以正向查找document,以便了解其包含哪些field信息;也可以通过反向索引,通过搜索字段的term,来查询包含该term的document。 [ 图1 ] Lucene总体架构   由图1所示,IndexSearcher实现了搜索的逻辑,IndexWriter实现了文档的插入与反向索引的建立,IndexReader由IndexSearcher调用以便读取索引的内容。IndexReader和IndexWriter都依赖于抽象类Directory,Directory提供操作索引数据及的API。   标准的Lucene是基于文件系统和基于内存的。   标准基于文件系统的后端的缺点在于,随着索引增加性能会下降,人们使用了各种不同的技术来解决这个问题,包括负载均衡和索引分片(index sharding,在多个Lucene实例之间切分索引)。尽管分片功能很强大

Elasticsearch Index模块

南笙酒味 提交于 2020-02-29 11:27:41
1. Index Setting(索引设置) 每个索引都可以设置索引级别。可选值有: static :只能在索引创建的时候,或者在一个关闭的索引上设置 dynamic :可以动态设置 1.1. Static index settings(静态索引设置) index.number_of_shards :一个索引应该有的主分片(primary shards)数。默认是5。而且,只能在索引创建的时候设置。(注意,每个索引的主分片数不能超过1024。当然,这个设置也是可以改的,通过在集群的每个节点机器上设置系统属性来更改,例如:export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128") index.shard.check_on_startup :分片在打开前是否要检查是否有坏损。默认是false。 index.routing_partition_size :自定义的路由值可以路由到的分片数。默认是1。 1.2. Dynamic index settings(动态索引设置) 如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。 index.number