干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践

从Lucene到Elasticsearch:Lucene6.0与Elasticsearch5.4全文检索实战 随着互联网数据的爆炸式增长,传统数据库基于B+树的行级查询已无法满足海量非结构化文本的高效搜索需求。全文检索技术通过构建倒排索引(Inverted Index),实现从“词项→文档”的快速映射,显著提升关键词定位效率。其核心思想是将文本切分为词条,并记录每个词条在哪些文档中出现及位置信息,从而支持模糊匹配、相关性排序等高级功能。 阅读详情

1、题记

2018年3月初,萌生了一个想法:对Elasticsearch相关的技术书籍做拆解阅读,该想法源自非计算机领域红火已久的【樊登读书会】、得到的每天听本书、XX拆书帮等。

目前市面上Elasticsearch的中文书籍就那么基本,针对ES5.X以上的三本左右;国外翻译有几本,都是针对ES1.X,2.X版本,其中《深入理解Elasticsearch》还算比较经典。

拆书的目的:

  • 1)梳理已有的Elasticsearch知识体系;
  • 2)拾遗拉在角落的Elasticsearch知识点;
  • 3)通过手敲动代码或命令行,在实践中再次“温故知新”,提前增加知识储备,避免项目/产品实战中的“临阵抱佛脚”;
  • 4)最大化的节省您的宝贵时间,让您最快的时间吸取最精华的“干货”。

本次解读是《从Lucene到Elasticsearch全文检索实战》。

2、本书梗概

作者是中科院硕士姚攀(90后)在读研究生期间根据实习写成优快云博客,最终成书。

  • 该书1/4章节讲解Lucence相关原理及实战;
  • 1/2章节讲解Elasticsearch基本概念:集群入门、搜索分类详解、聚合分析、Java API;
  • 1/4章节讲解Elasticsearch集群管理、项目实战、Hadoop实战。

总体评价:

优点:

  • 1)涵盖了Elasticsearch相关的基本概念、基础原理;
  • 2)有两个实战项目分享;

缺点:

  • 1)某些概念就只是有分类,没有讲解出不同分类的区别,不同分类的适用场景;
  • 2)某些细节点涵盖不全,偏理论,好多知识技术点,实战中应用会有不同。
  • 3)书基于Elasticsearch5.4.0讲解,一些特性6.X已不适用。

3、核心知识点梳理

以下的DSL都是通过ElasticsearchV6.2.2版本试验过的。

3.1 mget 一次获取多个文档。

1GET test_index/test_type/_mget
2{
3  "docs":[
4  {"_id":1},
5  {"_id":3}
6  ]
7}

最小简化版本:

1GET test_index/test_type/_mget
2{
3  "ids":[1,3]
4}

3.2 update更新

——添加、删除、更新字段

1POST test_index/test_type/1
2{
3  "no":1,
4  "name":"奔驰X100",
5  "addr":"德国",
6  "price":1000000,
7  "tags" : ["red"]
8}

3.2.1 添加字段

以下添加了新字段tags,赋值为“red”。

1POST test_index/test_type/1/_update
2{
3  "script":"ctx._source.tags = \"red\""
4}

修改后结果为:

1{
 2  "_index": "test_index",
 3  "_type": "test_type",
 4  "_id": "1",
 5  "_version": 6,
 6  "found": true,
 7  "_source": {
 8  "no": 1,
 9  "name": "奔驰X100",
10  "addr": "德国",
11  "price": 1000000,
12  "tags": "red"
13  }
14}

3.2.2 删除字段

1POST test_index/test_type/1/_update
2{
3  "script":"ctx._source.remove(\"new_field\")"
4}

3.2.3 更新字段-添加

 1POST test_index/test_type/1/_update
 2{
 3  "script" : {
 4  "source": "ctx._source.tags.add(params.tag)",
 5  "lang": "painless",
 6  "params" : {
 7  "tag" : "blue"
 8  }
 9  }
10}

更新后结果如下:

1{
 2  "_index": "test_index",
 3  "_type": "test_type",
 4  "_id": "1",
 5  "_version": 8,
 6  "found": true,
 7  "_source": {
 8  "no": 1,
 9  "name": "奔驰X100",
10  "addr": "德国",
11  "price": 1000000,
12  "tags": [
13  "red",
14  "blue"
15  ]
16  }
17}

3.2.4 删除字段(if判定)

 1POST test_index/test_type/1/_update
 2{
 3  "script" : {
 4  "source": "if (ctx._source.tags.contains(params.tag)) { ctx.op = 'delete' } else { ctx.op = 'none' }",
 5  "lang": "painless",
 6  "params" : {
 7  "tag" : "red"
 8  }
 9  }
10}

3.3 bulk批量请求的注意事项

  1. 每一行的结尾处都必须有换行符"n",最后一行也要有,换行符可以有效的分隔每行。
  2. 注意一次提交文件的大小,整个批量请求需要被加载到请求节点的内存里,所以请求越大,给其他请求可用的内存越小。
  3. 最佳bulk请求的大小,完全取决于服务器的硬件、文档的大小和复杂度以及索引和搜索的负载。

3.4 并发修改文档导致版本冲突的问题

以下是社区的问题,我认为更切合知识点。

线上的场景可能会对一个文档同一秒进行并发修改,导致会出现个别的VersionConflictEngineException 异常,我猜测是并发upsert请求 可能存在先获取到版本号的请求 比 后获取到版本号的请求 执行慢或者执行晚导致的,

毕竟默认es不会对文档操作加锁。但是如在不做锁机制的情况下处理这个问题呢。

解决方案(初步):

es版本控制有内部和外部两种类型。默认情况下,es使用内部版本控制。

version_type=external的时候是外部值控制。在使用外部版本类型时,系统会检查传递给索引请求的版本号是否大于当前存储的文档的版本,如果为true,则文档将被索引并使用新的版本号。

如果提供的值小于或等于存储文档的版本号,则会发生版本冲突,索引操作将失败。

1PUT /test_index/test_type/10?version=1520834740000&version_type=external
2{
3  "newadd":11,
4  "test":"true"
5}

返回结果:

 1{
 2  "_index": "test_index",
 3  "_type": "test_type",
 4  "_id": "10",
 5  "_version": 1520834740000,
 6  "found": true,
 7  "_source": {
 8  "newadd": 11,
 9  "test": "true"
10  }
11}

所以最简单的实现方式就是每次更新使用当前==时间戳==作为版本号,

3.5 动态映射和静态映射的区分

  1. 动态映射:文档写入ES中,它会根据字段的类型自动识别,这种称为:动态映射;
  2. 静态映射:写入数据之前对字段的属性进行手工设置。

3.6 text字段的特殊性

  1. 不用于排序,很少用于聚合(termsAggrions除外,未来版本会彻底禁止text类型聚合操作)。
  2. 题外话:如果需要可以借助 multi-fields.使用:keyword 类型。
  3. 官网解读:

http://t.cn/R6jy9Z3,http://t.cn/RnKU4tG

3.7 数据类型存储建议

对于数字类型的字段,在满足需求的情况下,要尽可能的选择范围小的数字类型。

3.8 过滤和搜索的区别

  1. 过滤:只根据条件对文档进行过滤,不计算评分;
  2. 搜索:解决的是相关度的问题。

当用户输入一个查询,Elasticsearch通过排序模型计算文档和查询关键词之间的相关度,按照评分排序后返回最想关的文档给用户。

e

细化:Elasticsearch接受到关键词以后到倒排索引中进行查询,通过倒排索引中维护的倒排记录表找到关键词对应的文档集合,然后做评分、排序、高亮处理,最终返回搜索结果给用户。

注意:ES是按照查询和文档的相关度进行排序的,默认按照评分降序排序。

3.9指定搜索字段的权重

1GET _search
2{
3  "query":{
4    "multi_match": {
5      "query": "美国",
6      "fields": ["addr^5", "name"]
7    }
8  }
9}

3.10 返回字段中至少有一个非控制的文档。

1GET _search
2{
3  "query":{
4    "exists":{
5      "field":"name"
6    }
7  }
8}

3.11 固定得分检索

 1GET /_search
 2{
 3    "query": {
 4        "constant_score" : {
 5            "filter" : {
 6                "term" : { "addr.keyword" : "美国"}
 7            },
 8            "boost" : 1.2
 9        }
10    }
11}

返回结果:

1{
 2  "took": 1,
 3  "timed_out": false,
 4  "_shards": {
 5    "total": 32,
 6    "successful": 32,
 7    "skipped": 0,
 8    "failed": 0
 9  },
10  "hits": {
11    "total": 3,
12    "max_score": 1.2,
13    "hits": [
14      {
15        "_index": "test_index",
16        "_type": "test_type",
17        "_id": "5",
18        "_score": 1.2,
19        "_source": {
20          "no": 5,
21          "name": "福特500",
22          "addr": "美国",
23          "price": 180000
24        }
25      },
26      {
27        "_index": "test_index",
28        "_type": "test_type",
29        "_id": "6",
30        "_score": 1.2,
31        "_source": {
32          "no": 6,
33          "name": null,
34          "addr": "美国",
35          "price": 180000
36        }
37      },
38      {
39        "_index": "test_index",
40        "_type": "test_type",
41        "_id": "3",
42        "_score": 1.2,
43        "_source": {
44          "no": 3,
45          "name": "福特300",
46          "addr": "美国",
47          "price": 300000
48        }
49      }
50    ]
51  }
52}

3.12 修改文档得分检索

借助:function Score Query 实现。

3.13 获取相似文章

1{
 2  "query": {
 3    "more_like_this": {
 4      "fields": [
 5        "title"
 6      ],
 7      "like": "新时代的领路人",
 8      "min_term_freq": 1,
 9      "max_query_terms": 12
10    }
11  },
12  "_source": "title",
13  "from": 1000,
14  "size": 5
15}

3.14 脚本检索

以下内容是6.X验证的。5.X版本要把source改成inline。

1POST test_index/_search
 2{
 3  "query":{
 4    "bool":{
 5      "must":{
 6         "script":{
 7        "script":{
 8          "source": "doc['price'].value > 100000",
 9     "lang":"painless"
10        }
11         }
12      }
13    }
14  }
15}

3.15 多字段高亮

字段高亮已经比较熟悉,有一种场景是:当我搜索title字段的时候,我期望高亮:title、content、abstr如何做到呢?

通俗的讲:不搜索某个字段,可以顺带高亮该字段。

 1POST test_index/test_type/_search
 2{
 3  "query":{
 4    "match_phrase":{
 5      "addr":"美国"
 6    }
 7  },
 8  "highlight": {
 9    "require_field_match":false,
10      "fields":{
11        "addr":{"pre_tags":["<strong>"],
12          "post_tags":["</strong>"]
13        },
14        "name":{"pre_tags":["<strong>"],
15          "post_tags":["</strong>"]}
16      }
17  }
18}
1{
 2  "took": 116,
 3  "timed_out": false,
 4  "_shards": {
 5    "total": 5,
 6    "successful": 5,
 7    "skipped": 0,
 8    "failed": 0
 9  },
10  "hits": {
11    "total": 3,
12    "max_score": 1.1143606,
13    "hits": [
14      {
15        "_index": "test_index",
16        "_type": "test_type",
17        "_id": "6",
18        "_score": 1.1143606,
19        "_source": {
20          "no": 6,
21          "name": "大片美国",
22          "addr": "美国",
23          "price": 180000
24        },
25        "highlight": {
26          "name": [
27            "大片<strong>美</strong><strong>国</strong>"
28          ],
29          "addr": [
30            "<strong>美</strong><strong>国</strong>"
31          ]
32        }
33      },
34      {
35        "_index": "test_index",
36        "_type": "test_type",
37        "_id": "5",
38        "_score": 0.5753642,
39        "_source": {
40          "no": 5,
41          "name": "福特500",
42          "addr": "美国",
43          "price": 180000
44        },
45        "highlight": {
46          "addr": [
47            "<strong>美</strong><strong>国</strong>"
48          ]
49        }
50      },
51      {
52        "_index": "test_index",
53        "_type": "test_type",
54        "_id": "3",
55        "_score": 0.5753642,
56        "_source": {
57          "no": 3,
58          "name": "福特300",
59          "addr": "美国",
60          "price": 300000
61        },
62        "highlight": {
63          "addr": [
64            "<strong>美</strong><strong>国</strong>"
65          ]
66        }
67      }
68    ]
69  }
70}

3.16 分片影响评分

Elasitcsearch 5.4 之后对于text类型的字段,默认采用是BM25评分模型,而不是基于tf-idf的向量空间模型,评分模型的选择可以通过similarity参数在映射中指出。

需要注意的是:ES在每个分片上单独打分,分片的数量会影响打分的结果。

这个问题比较有趣的讨论如下:https://elasticsearch.cn/question/2275

3.17 集群统计

统计集群的两个方面信息:

一:索引层面

  • 分片数、存储大小、内存使用情况;

二:节点层面

  • 节点数量、节点角色、操作系统、JVM版本、内存、CPU、插件信息x-pack等。
1GET  /_cluster/stats

4、核心工具推荐

工欲善其事必先利其器,好的工具能提升开发效率。

4.1 Luke 工具

1、功能介绍:

查看Luncene、Solr、Elasitcsearch索引的GUI工具,方便开发和诊断。

2、核心功能点:

  • 查看分析字段内容;
  • 搜素索引;
  • 执行索引维护;
  • 从HDFS读取索引;
  • 将全部或者部分索引转换为XML格式导出。
  • 测试自定义的Lucene分词器。

3、工具地址:https://github.com/DmitryKey/luke

4、最新版本

  • Upgrade to 7.2.0
  • http://t.cn/RnKU9dz

5、注意Luke的版本要和Lucene一致。

4.2 Tika工具

1、简介

Apache Tika是一个用于文本检测和文件内容提取的库。

2、特点

Tika 可以检测超过1000种不同类型的文档,比如PPT、PDF、DOC、XLS,所有的文档类型可以通过一个简单的接口被解析。

3、应用

Tika广泛应用于搜素引擎、内容分析、文本翻译、数字管理等领域。

4、下载地址http://tika.apache.org/download.htm

5、扩展

如果有全文知识库检索的项目,可以考虑使用Tika对多种不同类型的文档进行文档解析。

5、小结

此为拆解的第一本书,印证了我之前说的,核心知识点在Elasticsearch官网文档中都有更详尽的英文解读。

目前市面上没有一本书能涵盖全部的知识点。

书的目的多半是作者的一些学习、实践积累,更多的知识还得靠实践中总结、实践、再总结。

“书写是为了更好的思考”,与大家共勉!一起加油!

下一本书,紧张梳理中…..

推荐阅读:

《深入理解 Java 内存模型》读书笔记

面试-基础篇

Spring Boot 2.0 迁移指南

SpringBoot使用Docker快速部署项目

为什么选择 Spring 作为 Java 框架?

SpringBoot RocketMQ 整合使用和监控

Spring Boot 面试的十个问题

使用 Spring Framework 时常犯的十大错误

SpringBoot Admin 使用指南

SpringBoot Kafka 整合使用

SpringBoot RabbitMQ 整合使用

Elasticsearch索引增量统计及定时邮件实现

上篇好文:

Elasticsearch实战 | 必要的时候,还得空间换时间!

三、Crowd与JIRA、Confluence用户集成并SSO单点登录 补充说明: 通过此方法集成后,用户、组以及用户和组的关系都在Crowd系统中存储,但各个系统的权限仍由各系统控制,也可在JIRA和Confluence中添加和删除用户。 在做步骤4和步骤5的时候,要特别小心,确保当前系统的超级权限用户(一般为admin,具体看当前系统的全局权限配置)和组以及它们的关系已经在Crowd中同样存在了,才可切换并禁用当前系统的内部用户目录,否则可能造成权限丢失等严重问题(因为禁用了内部用户目录,而Crowd中又不存在这个超级权限用户和组或它们的关系,所以权限就丢失了) 维护示例 阅读详情

相关推荐

VirtualBox创建虚拟机(为安装Ubuntu桌面系统)

Ubuntu的安装非常灵活。但是万变不离其宗,归纳起来,无非就是以下3种:(1)用户可以下载完整的ISO镜像文件,将其转移到各种介质上面,例如DVD或者U盘,然后以该介质引导系统进行安装。(2)用户可以下载一个非常小的网络安装器,利用该安装器引导系统进行在线安装。(3)用户可以将Ubuntu安装到一个U盘中,随身携带。为了便于读者学习,本节将介绍通过完整的ISO镜像文件安装Ubuntu。其他的安装方式将在后面介绍。

夏天又到了的专栏 2689

Elasticsearch 5.4新闻搜索项目实战视频教程

Elasticsearch 5.4新闻搜索项目实战视频教程:本课程基于Java开发,通过项目案例的方式讲解Elasticsearch分布式搜索引擎(Elasticsearch索引)中的核心技术,ES的版本为5.4,学员学习本课程以后可以初级实现类似百度新闻搜索项目。ElasticSearch是一个基于Lucene的分布式搜索引擎,适合做大数据搜索和大数据分析,百度、腾讯、360、斗鱼、快手、饿了么等诸多一线互联网公司都在使用Elasticsearch。1.课程提供完整课件和源代码。

TOGAF9.2/10 认证基础知识点概览表

(考点解析:业务场景是一种重要的技术,可以在企业架构的各个阶段使用,主要是架构愿景和业务架构,但如果需要,也可以在其他架构域中使用,以直接从业务的高级需求中派生架构的特征。“哪里”可以看作是对相关企业的界定、“为什么”可以被视为组织环境中的关键驱动因素和要素、“谁”是指确定发起人利益相关者和受业务指令影响的其他主要利益相关者,以创建企业架构,并确定他们来自企业的需求和优先级、他们与企业的关系以及彼此之间所需的工作行为。它是业务驱动和业务主导的,它结 合了所有业务线的必要努力,以实现所需的能力。

2302_81497763的博客 2079

从Lucene到Elasticsearch:全文检索实战之信息检索模型

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34417635的博客 519

通信工程学习:什么是ASK振幅键控、FSK频移键控、PSK相移键控

ASK、FSK和PSK是三种基础数字调制技术。ASK通过改变载波振幅传输信息,实现简单但抗干扰弱;FSK利用频率变化传递信号,抗干扰较强但频谱利用率一般;PSK通过相位变化编码数据,抗干扰和频谱效率最优但同步要求高。三种技术各具特点,分别适用于不同通信场景:ASK用于低速光纤通信,FSK常见于无线广播,PSK则广泛应用于Wi-Fi、蓝牙等现代通信系统。

limengshi138392的博客 8730

VFH避障/局部路径规划算法

VFH避障/局部路径规划算法 本文章是我看《The Vector Field Histogram-Fast Obstacle Avoidance for Mobile Robots》论文时候的笔记,感兴趣的欢迎去看原论文。 VFH中有一些概念是从其他算法中借鉴过来的,并且VFH算法本身就是对VFF(Virtural Force Field)的一种改进,其中有很多的相似之处。所以按照原论文的思路,先介绍由CMU提出的Certainty Grid算法中的一些概念,再介绍一下势场法中的一些概念,接着介绍一下VFF

qq_41845878的博客 8120

《从Lucene到Elasticsearch:全文检索实战》已出版!

一、前言 决定在优快云写博客的原因是想把自己解决过的问题、踩过的坑、总结出来的经验记录下来,作为编程之路的“笔记本”,同时也能给遇到同样问题的人提供参考、节省时间,写书的初衷也一样。 二、缘起 说一下写书的前因后果。中国科学院大学雁栖湖校区是很重要的一年,师资团队无可挑剔,每次上课去的稍微晚一点,300人的大教室都没有座位。对于计算机学院而言,大数据、机器学习、信息检索(搜索引擎)、算...

1.02^365=1377.41 1万+

【模型构建器教程】教你在ArcGIS中如何按照字段值批量导出shp文件

【模型构建器教程】教你在ArcGIS中如何按照字段值批量导出shp文件

weixin_45469245的博客 6457

从lucene到ElasticSearch

文章目录初识 Lucene1.什么是LuceneElasticSearch1.介绍2.基本概念 初识 Lucene 1.什么是Lucene Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 ...

阳阳阳的博客 2121

基于STM32、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 配置0: 使用内部参考电压(2.5V),增益128,双极性。// 配置通道0: AIN0+和AIN1-,使用配置0和滤波器0。// 100ms采样间隔。// 转换为电压值(使用内部2.5V参考电压)// 构造读命令: 最高位为1表示读,接下来7位是寄存器地址。// 构造写命令: 最高位为0表示写,接下来7位是寄存器地址。// 配置滤波器0: 输出数据率50Hz,后置滤波器4。

corlin6688的博客 529

FAA机载电子硬件审查指南详解(评审和审查必备)

本咨询通告旨在协助认证机构、授权代表(包括组织授权)和申请人执行机载电子硬件评审(以下简称"硬件评审")。硬件评审的目的是评估机载电子硬件是否符合适航要求和建议的符合性方法(即RTCA/DO-254)。本工作辅助文件应作为评审过程中的参考工具使用。它不应被用作检查表,也不包含所有可能需要评审的情况。同样,本工作辅助文件也不是用来替代DO-254,而应与DO-254一起使用。此外,本工作辅助文件可能包含一些不适用于特定项目评估的问题。

qq_41854911的博客 610

严选 | ELK Stack 选书指南

少废话,直接干货。 0、我们为什么要买一本书? 书中梳理出更清晰的知识体系 书是作者实践总结的干货 书的理论基础部分能快速带我入门 书的实践部分帮我们提升技能 书中知识是网上官网文档/google/stackoverflow/github等都短时间不能找到的资料 书是一种工具,帮我们产品、项目开发中遇到问题能快速找到答案 …… 1、当我们在都技术书时,我们在读什么? 读基础...

铭毅天下Elasticsearch 4987

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error

QT5.12.1报错:1. clang++:error: :fatal error andriod Input/output error 解决方式: 1.qt程序不要放在共享目录下编译,直接拷贝到ubuntu系统中编译 2.修改/home/xt/Qt5.12.1/5.12.1/android_armv7/mkspecs/android-clang中 #QMAKE_LINK = QMAKECXXQMAKE_CXX QMAKEC​XXQMAKE_CFLAGS -Wl,–exclude-libs,libgc

xt18971492243的博客 738

优快云个人简介:SGEO优化韦杰

从传统SEO网站关键词优化,正式转型深耕AI大模型GEO生成式引擎优化领域。凭借多年沉淀的搜索引擎底层逻辑、排名规则研判能力,深度拆解GEO生成式引擎优化的核心算法与运行逻辑,精准攻克行业流量获取、内容收录、排名迭代等核心技术痛点。转型至今,已成功服务上百家企业客户,助力品牌在AI生成式引擎场景中实现高效曝光、精准获客。

2601_96730728的博客 254

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

全文检索及Lucene及elasticsearch详解

一、什么是全文检索 数据的分类: 结构化数据 格式固定、长度固定、数据类型固定 例如:数据库中的数据 非结构化数据 格式不固定、长度不固定、数据类型不固定 例如:word文档、pdf文档、邮件、html、txt 数据的查询: 结构化数据的查询 sql语句。查询结构化数据的方法简单、速度快。 非结构化数据的查询 目测 使用程序把文档读取到内存中,然后匹配字符串,顺序扫描 把...

Ferao的博客 3941

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Lucene+ElasticSearch入门至项目实战(Java高级、架构师必备套餐)

课程提供所有代码笔记素材以及答疑 1、熟练掌握Lucene框架的使用,实现类似百度、京东商城等应用的全文检索效果; 2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、java api 操作 ES 7、电商项目实战应用等等 .....

《从Lucene到Elasticsearch:全文检索实战》学习笔记五

今天我给大家讲讲tf-idf权重计算 tf-idf权重计算:        tf-idf(中文词频-逆文档概率)是表示计算词项对于一个文档集或语料库中的一份文件的重要程度。词项的重要性随着它在文档中出现的次数成正比,会随着它在文档集中出现的频率成反比。如果一个词项在一遍文档中出现的频率非常高,说明其比较重要,如果这个词项在其他文档中出现的频率也高,那么说明这个词有可能是比较通用的。     ...

yin4302008的专栏 771

Lucene相关站点和书籍

<br />转自http://hi.baidu.com/lewutian/blog/item/c1c56703f6a8c67b3912bbec.html<br /><br />Introduction to Text Indexing with Apache Jakarta Lucene<br />http://www.onjava.com/pub/a/onjava/2003/01/15/lucene.html<br />Advanced Text Indexing with Lucene<br />htt

赖太阳的专栏 976

lucene好书推荐

lucene实战(第二版) lucene in Action

miaoxiong2323的专栏 1770

Elasticsearch全文检索实战小结——复盘我带的第二个项目

一、项目概述这是一个被我称之为“没有枪、没有炮,硬着头皮自己造”的项目。项目是和其它公司合作的三个核心模块开发。 使用ES的目的是: 1)、采集数据、网站数据清洗后存入ES; 2)、对外提供精确检索、通配符检索、模糊检索、分词检索、全文检索接口等二次封装接口。二、项目架构 如上图所示,ES作为中间层,一方面存储数据清洗后存储的数据,另一方面对外提供插入、更新、删除、检索接口的。三、ES使用小

铭毅天下Elasticsearch 1万+

从Lucene到Elasticsearch

Lucene的总体架构:     文档:索引与搜索的主要数据载体,它包含一个或多个字段,存放将要写入索引或将索引搜索出来的数据。     字段:文档的一个片段,它包括两个部分:字段的名称和内容。     词项:搜索时的一个单位,代表文本中的某个词。     词条:词项在字段中的一次出现,包括词项的文本,开始和结束的位移以及类型。 Apache Lucene

Leo专题 2184

《从Lucene到Elasticsearch:全文检索实战》学习笔记一

      今天,我主要给大家讲一下信息检索概念。        信息检索:        互联网时代的飞速发展使人们进入了信息爆炸时代,据统计全球的互联网用户已达到30亿,在各个网站及移动app在每个分钟 产生的数据量是巨大的,从而导致数据就具有了数据量巨大大,数据种类繁多,数据更新快等特点,这些数据具有很大的价值,无 数科学家和工程师提出了很多方法从这海量数据中获取我们想要的数据。例如...

yin4302008的专栏 875

《从Lucene到Elasticsearch:全文检索实战》学习笔记三

      今天我给大家讲讲倒排索引。       索引是构成搜索引擎的核心技术之一,它在日常生活中是非常常见的,比如我看一本书的时候,我首先会看书的目录,通过目录可以快速定位到具体章节的页码,加快对内容的查询速度。       文档通常保存在各种数据库管理系统之中,比如mysql,oracle等,但是搜索引擎的数据不能保存在数据库,主要原因有两点:一是搜索引擎的数据量非常庞大,大型搜索引擎需...

yin4302008的专栏 914
上一篇: Elasticsearch索引增量统计及定时邮件实现
下一篇: 20 个案例教你在 Java 8 中如何处理日期和时间?
SpringForAll
博客等级 码龄7年 15粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值