随笔分类 - 搜索引擎
1
摘要:一、集群规划 搭建一个集群我们需要考虑如下几个问题: 1. 我们需要多大规模的集群? 2. 集群中的节点角色如何分配? 3. 如何避免脑裂问题? 4. 索引应该设置多少个分片? 5. 分片应该设置几个副本? 下面我们就来分析和回答这几个问题 1、我们需要多大规模的集群? 需要从以下两个方面考虑: 1
阅读全文
摘要:一、ES Client 简介 1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式 3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式
阅读全文
摘要:一、聚合分析简介 1. ES聚合分析是什么? 聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值、最小值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强大的聚合分析能力。 对一个数据集求最大、最小、和、平均值等指标的聚合,
阅读全文
摘要:一、查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验。主要包括: 拼写检查; 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的API 查询建议也是使用_search端点地址。在DSL中suggest节点来定义需要的建议查询 示例
阅读全文
摘要:一、搜索API 1. 搜索API 端点地址 从索引tweet里面搜索字段user为kimchy的记录 从索引tweet,user里面搜索字段user为kimchy的记录 从所有索引里面搜索字段tag为wow的记录 说明:搜索的端点地址可以是多索引多mapping type的。搜索的参数可作为URI请
阅读全文
摘要:一、分词器 1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成: character filter :字符过滤器,对文本进行字符过滤处理,如处理文本中的html标签字符。处理完后再交给tokenizer进行分词。一个analyzer中可包含0个或
阅读全文
摘要:一、快速入门 1. 查看集群的健康状况 http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状态值说明 Green - everything is good (cluster is full
阅读全文
摘要:一、ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单
阅读全文
摘要:一、分面搜索 1. 什么是分面搜索? 分面搜索:在搜索结果的基础上进行按指定维度的统计,以展示搜索结果的另一面信息。类似于SQL语句的group by 分面搜索的示例: http://localhost:8983/solr/techproducts/browse 2. Solr中支持的分面查询 字段
阅读全文
摘要:一、solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query,使用所有搜索器IndexSearcher执行查询对象Query得到TopDocs,遍历TopDoc
阅读全文
摘要:一、SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar。在我们的应用中引入solrj: 2. SolrJ的核心API SolrClient SolrRequest SolrResponse 3. SolrClient 的子类 HttpSol
阅读全文
摘要:一、Schema介绍 1. Schema 是什么? Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段、字段的数据类型、字段该索引存储。 2. Schema 的定义方式 Solr中提供了两种方式来配置schema,两者只能选其一 2.1 默认方式,通过Schema A
阅读全文
摘要:一、solr两种部署模式介绍 Standalone Server 独立服务器模式:适用于数据规模不大的场景 SolrCloud 分布式集群模式:适用于数据规模大,高可靠、高可用、高并发的场景 二、独立服务器模式详解 1. 独立服务器模式架构 说明: 1、每个solr服务器实例(启动的一个solr服务
阅读全文
摘要:一、前言 前面已经学习了Lucene的分词、索引详解、搜索详解的知识,已经知道开发一个搜索引擎的流程了。现在就会有这样的一个问题:如果其他的系统也需要使用开发的搜索引擎怎么办呢?这个时候就需要把开发的搜索引擎封装成一个组件或者独立成一个单独的服务给其他系统使用了。目前市面上已经有基于Lucene的成
阅读全文
摘要:一、搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字、对关键字进行分词、根据分词结果去索引库里面找到对应的文章id、根据文章id找到对应的文章 2. Lucene搜索API 图示 3. Lucene搜索代码示例 先在pom.xml里面引入查询分析器模块
阅读全文
摘要:一、IndexWriter详解 问题1:索引创建过程完成什么事? 分词、存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lucene的索引API创建索引、存储。 这里重点要强调应用代码负责做什么,lucene负责做什么。 2
阅读全文
摘要:一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 3. 新建一个标准分词器StandardAnalyzer的测试类Luc
阅读全文
摘要:一、Lucene分词器详解 1. Lucene-分词器API (1)org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理器)。通过调用它的如下两个方法,得到输入文本的分词处理器。
阅读全文
摘要:一、Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索
阅读全文
摘要:一、为什么需要搜索引擎 问题1:数据库索引的原理是怎样的? 索引原理:对列值创建排序存储,数据结构={列值、行地址}。在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据。 问题2:索引的排序,是怎么排的? 数值列 时间列 文本列 问题3:在新闻标题列上建索引,当我们查
阅读全文
1