当前位置:首页 » 操作系统 » lucene源码分析

lucene源码分析

发布时间: 2023-05-31 13:59:57

‘壹’ 如何在eclipse中导入lucene源码

您好,很高兴为您解答: tgz包是linux下常用的压缩包格式,因为在linux下没有Windows平台下的rar和zip压缩包。 如果,你是在windows平台下开发,建议你重新下载一个rar或zip格式的包。 如果你是在linux下开发,那么你可以通过命令来减压后使用。...

‘贰’ lucene-3.6.0.tgz和lucene-3.6.0-src.tgz是啥啊,怎么有两个类似的文件包呢;

已经有答案了,很简单.看到tgz结尾的就是Linux相关操作系统使用的压缩包,就想Windows系统下的zip 和rar结尾的压缩包一样.

.asc格式的程序文件,是压缩过的Concept的程序文件,需要用Concept里的转换Convert功能,而且,只能是低版本向高版本转.

详细一点说明,我给你找了一点资料

后缀为asp asa asc的文件都是ASP文件
Active Server Page(ASP,活动服务器页面)就是一个编程环境,在其中,可以混合使用HTML、脚本语言以及组件来创建服务器端功能强大的Internet应用程序。
ASP的工作原理:

当在Web站点中融入ASP功能后,将发生以下事情:

1、用户调出站点内容,默认页面的扩展名是.asp。

2、浏览器从服务器上请求ASP文件。

3、服务器端脚本开始运行ASP。

4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。

5、页面信息发送到浏览器。

因为脚本是在服务器端运行的,所以Web服务器完成所有处理后,将标准的HTML页面送往浏览器。这意味着,ASP只能在可以支持的服务器(WINNT系列服务器)上运行。让脚本驻留在服务器端的另外一个益处是:用户不可能看到原始脚本程序的代码,用户看到的,仅仅是最终产生的HTML内容。计算过程在服务器上进行,返回Html脚本,而不需要客户端进行运算。WIN2003中使用的是ASP3.0版本,将较长使用的页面存放在硬盘中(而不仅仅是在内存中),这意味着缓存了更多的原来需要重新编译的内容,极大的提高了性能。

可以利用任何支持文本的编辑器或网页设计器修改
利用IIS可以运行

‘叁’ lucene按匹配度排序是怎么做到的

Lucene的搜索结果默橡戚认按相关度排序,这个相关度排序是基于内部的Score和DocID,Score又基于关键词的内部评分和做索引时的boost。默认Score高的排前面,如果Score一样,再按索引顺序,先索引档圆的排前面。那么有人问了,如果我要先索引的排后面怎么办呢?隐士研究了源码后发现这是相当简单的事情。以下代码基于Lucene 2.0。

看Sort的默认构造函数,相关度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的组合。

java 代码
/**
* Sorts by computed relevance. This is the same sort criteria as calling
* {@link Searcher#search(Query) Searcher#search()}without a sort criteria,
* only with slightly more overhead.
*/
public Sort() {
this(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });
}
那么该如何构造我们需要的SortField呢?请看SortField的一个构造函数,有一个参数reverse可供我们调整结果集的顺序。

java 代码
/** Creates a sort, possibly in reverse, by terms in the given field with the
* type of term values explicitly given.
* @param field Name of field to sort by. Can be <code>null</code> if
* <code>type</code> is SCORE or DOC.
* @param type Type of values in the terms.
* @param reverse True if natural order should be reversed.
*/
public SortField (String field, int type, boolean reverse) {
this.field = (field != null) ? field.intern() : field;
this.type = type;
this.reverse = reverse;
}
由此可见,只要构造一个SortField[]就可以实现我们要的功能,请看:

java 代码
// 评分降序,评分一样时后索引的排前面
new SortField[] { SortField.FIELD_SCORE, new SortField(null, SortField.DOC, true) }

// 评分升序,评分一样时后索引的排前面,呵呵,此为最不相关的排前面,挺有趣的
new SortField[] { new SortField(null, SortField.SCORE, true), new SortField(null, SortField.DOC, true) }
呵呵,只要将此SortField[]作为参数传入Sort的构行如塌造函数得到Sort的一个instance,将此instance传入searcher.search(query, sort)即可得到了期望的结果。

‘肆’ 如何在eclipse中导入lucene源码

1.启动eclipse,使用svn插件从https://svn.apache.org/repos/asf/lucene把trunk代码checkout出来。

2.如果你没有安装ant,那么先安装ant(ant.apache.org)。

3.进入cmd,切入到源代码目录(在lucene和solr目录的上一级)。

4.然后使用ant eclipse(如果你没有安装ivy的话,ant会提示你安装,按照提示安装)

5.在eclipse中创建java project,勾掉Use default location,选择luence,然后下一步直到完成导入lucene,同样的导入solr。

6.因为solr引用lucene,所以在solr的buildpath中加入对lucene项目引用。

‘伍’ Elasticsearch解决问题之道——请亮出你的DSL

0、引言

在业务开发中,我们往往会陷入开发的细枝末节之中,而忽略了事物的本源。

经常有同学问到:

等等等等…..

以上的看似复杂的问题,如果转换成DSL,清楚的写出来,梳理清楚问题的来龙去脉,问题就自然解决了一大半。

所以,请亮出你的dsl,不论什么语言的检索,转换到es查询都是sql查询,在es中对应dsl语法,es再拆解比如:分词match_phrase拆解成各term组合,最终传给lucene处理。

亮出你的dsl,确保编程里的实现和你的kibana或者head插件一致是非常重要、很容易被忽视的工作。

如果对dsl拆解不理解,那就再 加上 profile:true或者explain:true拆解结果一目了然。

维基网络定义:领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。

Elasticsearch提供基于JSON的完整查询DSL来定义查询。 将Query DSL视为查询的AST(抽象语法树),由两种类型的子句组成:

1、叶子查询子句

叶查询子句查找特定字段中的特定值,例如匹配,术语或范围查询。 这些查询可以单独使用。

2、复合查询子句

复合查询子句可以组合其他叶子或复合查询,用于以逻辑方式组合多个查询(例如bool或dis_max查询),或更改其行为(例如constant_score查询)。

给个例子,一看就明白。

看到这里,可能会有人着急了:“我X,这不是官网定义吗?再写一遍有意思吗?”

引用一句鸡汤话,“再显而易见的道理,在中国,至少有一亿人不知道”。同样的,再显而易见的问题,在Elasticsearch技术社区也会有N多人提问。

基础认没誉知不怕重复,可怕的是枯链段对基础的专研、打磨、夯实。

Elasticsearch相关的核心操作,广义上可做如下解读,不一定涵盖全,仅抛砖引玉,说明DSL的重要性。

从大到小。

集群的管理,一般我们会使用Kibana或者第三方工具Head插件、cerebro工具、elastic-hq工具。

基本上硬件的(磁盘、cpu、内存)使用率、集群的 健康 状态都能一目了然。

但基础的DSL会更便捷,便于细粒度分析问题。

如:集群状态查询:

如:节点热点线程查看:

如:集群分片分配情况查看:

索引生命周期是一直强调的概念,主要指索引的“生、老、病、死”的全过程链条的管理。

创建索引我们优先使用较单纯index更灵活的template模板。

创建索引类似Mysql的创建表的操作,提前设计好表结构对应ES是提前设计好M app ing非常重要。

两个维度:

举例:

如:索引清理缓存。

如:某原因导致分片重新分配,_recovery查看分片分配状态。

高版本的索引生命周期管理推荐使用:ILM功能。

这个是唤让大家再熟悉不过的了。

举例:

删除数据包括:指定id删除 delete和批量删除delete_by_query(满足给定条件)。

更新操作。包括:指定id的update/upsert或者批量更新update_by_query。

这是ES的重头戏。包含但不限于:

1、支持精确匹配查询的:term、range、exists、wildcard、prefix、fuzzy等。

2、支持全文检索的:match、match_phrase、query_string、multi_match等

1、Bucketing分桶聚合

举例:最常用的terms就类似Mysql group by功能。2、Metric计算聚合

举例:类比Mysql中的: MIN, MAX, SUM 操作。3、Pipeline针对聚合结果聚合

举例:bucket_script实现类似Mysql的group by 后having的操作。

留给大家 结合 业务场景思考添加。

这里把开头提到的几个问题逐一解答一下。

实际Mysql业务中,我们一般是先验证sql没有问题,再写业务代码。

实际ES业务中,也一样,先DSL确认没有问题,再写业务代码。

写完java或者python后,打印DSL,核对是否完全一致。

不一致的地方基本就是结果和预期不一致的原因所在。

第一步:借助analyzer API分析查询语句和待查询document分词结果。

这个API的重要性,再怎么强调都不为过。

第二步:可以借助profile:true查看细节。第三步:核对match_phrase词序的原理。

6.3版本后已经支持sql,如果不会写,可以借助translate 如下API翻译一下。

不够精确,但足够参考用了,需要根据业务细节微调。

当然,还是 建议 ,从业务出发,自己写DSL。

从大往小,逐步细化排解

END

公众号 ( sheng )里回复 面经、ES、Flink、 Spring、Java、Kafka、监控 等关键字可以查看更多关键字对应的文章

1、《从0到1学习Flink》—— Apache Flink 介绍

2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

3、《从0到1学习Flink》—— Flink 配置文件详解

4、《从0到1学习Flink》—— Data Source 介绍

5、《从0到1学习Flink》—— 如何自定义 Data Source ?

6、《从0到1学习Flink》—— Data Sink 介绍

7、《从0到1学习Flink》—— 如何自定义 Data Sink ?

8、《从0到1学习Flink》—— Flink Data transformation(转换)

9、《从0到1学习Flink》—— 介绍 Flink 中的 Stream Windows

10、《从0到1学习Flink》—— Flink 中的几种 Time 详解

11、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 ElasticSearch

12、《从0到1学习Flink》—— Flink 项目如何运行?

13、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 Kafka

14、《从0到1学习Flink》—— Flink JobManager 高可用性配置

15、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

16、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

17、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

18、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了

19、大数据“重磅炸弹”——实时计算框架 Flink

20、《Flink 源码解析》—— 源码编译运行

21、为什么说流处理即未来?

22、OPPO数据中台之基石:基于Flink SQL构建实数据仓库

23、流计算框架 Flink 与 Storm 的性能对比

24、Flink状态管理和容错机制介绍

25、原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理

26、Apache Flink 是如何管理好内存的?

27、《从0到1学习Flink》——Flink 中这样管理配置,你知道?

28、《从0到1学习Flink》——Flink 不可以连续 Split(分流)?

29、Flink 从0到1学习—— 分享四本 Flink 的书和二十多篇 Paper 论文

30 、360深度实践:Flink与Storm协议级对比

31、Apache Flink 1.9 重大特性提前解读

32、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

33、美团点评基于 Flink 的实时数仓建设实践

34、Flink 灵魂两百问,这谁顶得住?

35、一文搞懂 Flink 的 Exactly Once 和 At Least Once

36、你公司到底需不需要引入实时计算引擎?

‘陆’ 在Myeclipse上建立Lucene2.9.0工程,但是看不到诸如Document和Field等类的源码.求解

首先下载源码包,在官网上都能下都是族高悔压缩格式的
然后你在自己写的 有导入Lucene相关的类名上按住CTRL然后点击类名
会弹念凳出一个.CLASS的文件,这个是看不见源码的,
然后在这个页面的左上方有个Attach Source 这样一个按钮兆正,你点了然后把源码包导入就可以看见源码了,祝你好运

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:639
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:368
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:84
php微信接口教程 发布:2025-04-16 17:07:30 浏览:310
android实现阴影 发布:2025-04-16 16:50:08 浏览:793
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:343
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:212
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:812
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:366
土压缩的本质 发布:2025-04-16 16:13:21 浏览:592