全文检索

ElasticSearch入门篇Ⅰ --- 核心知识概括

徘徊边缘 提交于 2019-11-29 17:41:27
C01.什么是Elasticsearch 1.什么是搜索 垂直搜索(站内搜索) 互联网的搜索:电商网站,招聘网站,各种app IT系统的搜索:OA软件,办公自动化软件,会议管理,员工管理,后台管理系 2.如果用数据库做搜索会怎么样 数据库在做某些搜索(模糊搜索)时,效率会很差,是不太靠谱的。 3. 什么是全文检索? 数据库搜索的弊端: 数据库里有100万条数据,模糊匹配要扫描100万次,每次扫描都要匹配文本所有字符,还无法拆解开来检索。 全文检索 :会将100万条数据拆分开来,建立 倒排索引 ,搜索的时也许第一次就可以搜素到对应的数据,可能是100次,1000次,上述过程就叫全文检索。 Lucene: 就是一个jar包,里面包含各种建立倒排索引,以及搜索的代码,包括各种算法。我们Java开发时,引入lucene的jar进行开发就可以了。使用lucene,我们可以去将已有的数据建立索引,lucene会在本地磁盘上面给我们组织索引的数据结构。 lucene的弊端 :数据量大,一台机器难以放下,需要多台机器,可用性,可维护性差。 4.什么是Elasticsearch 自动维护数据的分布到多个节点的索引的建立,还有搜索请求分不到多个节点执行 自动维护数据的冗余副本,保证说一些机器宕机了,不会丢失任何的数据 分装了更多的高级功能,以给我们提供更多高级的支持,让我们快速地开发应用

zg手册 之 Mysql 开发(1)-- 中文全文检索插件开发

这一生的挚爱 提交于 2019-11-29 14:02:55
目前的中文检索查询方案 基于数据库的模糊匹配(运行时字符串查找,查询速度比较慢) 专有的全文检索引擎(sphinx, lucene等) 我曾经遇到一个项目,数据量在百万级别,不需要高级的全文检索方式(没有复杂的匹配需求,没有复杂的过滤条件),只是需要根据关键词检索数据,当时采用的 mysql 全文检索插件的方式来满足的项目需求。 Mysql 的中文全文检索插件开发 Mysql 的 MyISAM 引擎支持第三方的全文检索插件,可以用第三方插件替换默认的全文检索插件。 在全文检索插件中提供中文分词算法,告诉MyISAM如何分词,并创建索引。 查询的时候通过插件分词,查询索引快速定位数据记录。 插件开发的具体方法 主要通过代码注释描述插件的开发方法,创建文件 tft.c,代码如下 #include <stdlib.h> #include <ctype.h> // mysql 插件必须包含的头文件 #include <mysql/plugin.h> // 这是我自己写的一个分词库,没有什么优化,可以替换为其他开源的实现。 #include <st_darts.h> #include <st_utils.h> #if !defined(__attribute__) && (defined(__cplusplus) \ || !defined(__GNUC__) || __GNUC__ ==

ElasticSearch全文检索引擎-介绍

这一生的挚爱 提交于 2019-11-28 18:22:48
文章目录 全文检索 数据分类: 两种方法 全文检索过程 全文检索引擎 相关产品 ElasticSearch 为什么要选择ElasticSearch 全文检索 一 种将文件种或者数据库中所有文本与检索项匹配的文字资料检索方法。对全文数据的检索 数据分类: 结构化数据 行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据 能够用数据或统一的结构加以表示 数字、符号去表示 非结构化数据 无法用数字或统一的结构表示 文本、图像、声音、网页 结构化数据属于非结构化数据 非结构化数据即为全文数据 两种方法 顺序扫描法 将数据库中所有的内容挨个扫描 索引扫描法 全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。 全文检索过程 索引创建 索引保存的是一个词元,对应文档的id 索引只会创建一次 如何创建: 一些要索引的原文档(Document) 将原文档传给分词组件(Tokenizer) 将得到的词元(Token)传给语言处理组件(LinguisticProcessor) 将得到的词(Term)传给索引组件(Indexer) 搜索索引 用户输入查询语句 对查询语句进行词法分析,语法分析,及语言处理 搜索索引,得到符号文档 全文检索引擎 全文检索引擎是目前广泛应用的主流搜索引擎。

ElasticSearch全文检索引擎-安装

江枫思渺然 提交于 2019-11-28 18:22:43
文章目录 ElasticSearch安装 安装JDK 安装ElasticSearch 安装ik中文分词 ElasticSearch和ik分词安装成功 ElasticSearch安装 安装JDK 下载rpm包 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.rpm" rpm安装 rpm -ivh jdk-8u201-linux-x64.rpm 安装成功后测试 java javac java -version 命令都能使用 安装ElasticSearch 官网 ElasticSearch 下载 这里我下载的2.4.6版本 wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.4.6

ElasticSearch全文检索引擎-使用

家住魔仙堡 提交于 2019-11-28 18:22:42
文章目录 ElasticSearch使用 手册官网 索引 elasticsearch-jdbc ElasticSearch使用 手册官网 es-docs es-php-docs 索引 创建索引 vim createindex.json { "settings": { "refresh_interval": "5s", "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "_default_": { "_all": { "enabled": true } } }, "products": { "dynamic": false, "properties": { "productid": { "type": "long" }, "title": { "type": "string", "index": "analyzed", "analyzer": "ik" }, "descr": { "type": "string", "index": "analyzed", "analyzer": "ik" } } } } 具体的字段意思手册上都有 创建 curl -XPOST "http://ip:port/shop" -d'@createindex.json 这里的shop就是我们要设置的索引名称 可以自定义

Neo4j 全文检索

眉间皱痕 提交于 2019-11-28 15:27:14
全文检索基本概念 搜索 搜索这个行为是用户与搜索引擎的一次交互过程,用户需要找一些数据,他提供给搜索引擎一些约束条件.搜索引擎通过约束条件抽取一些结果给用户 搜索引擎 搜索引擎存在的目的是存储,查找和获取数据.Neo4j用的搜索引擎是 Lucene 文档 在搜索软件中,文档是一等公民.存储,搜索,显示都是以文档为核心.文档简单可以理解为数据库中的一行数据,但是这行数据包括了field name. 倒排索引 倒排索引是搜索引擎中核心数据结构.简而言之,它将所有文档变成像是一本书后面词汇表的东西. 通过这种数据结构能够快速的从一个单词找到文档 Lucene搜索语法 Query implementation Purpose Example TermQuery 单词匹配 neo4j PhraseQuery 短语匹配 "graph database" RangeQuery 范围匹配 [A TO Z] {A TO Z} WildcardQuery 正则匹配 g*p?, d??abase PrefixQuery 前缀匹配 algo* FuzzyQuery 后缀匹配 cipher~ BooleanQuery 查询条件聚合 graph AND "shortest path" 环境准备 容器启动Neo4j docker run -p 17687:7687 -p 17474:7474 --name

NEO4J全文检索架构

杀马特。学长 韩版系。学妹 提交于 2019-11-28 05:28:16
NEO4J全文检索架构 一、有大量存量数据(亿级以上)(并长期有增量数据进入) 二、无大量存量数据或者少量存量数据(或全部为增量数据) 三、架构方案选择优先级 以下方案,是根据实践总结的基于NEO4J的全文检索解决方案,各有优缺点,仅供参考。以下总结全部基于neo4j-3.4.9版本,至于升级到3.5.x之后的版本索引有了大幅提升,还未做测试。 一、有大量存量数据(亿级以上)(并长期有增量数据进入) 1、使用NEO4J + ELASTICSEARCH 二、无大量存量数据或者少量存量数据(或全部为增量数据) 1、建立全文检索之后,设置索引同步更新即可(对于大量数据的索引重建比较费时)。 2、建立全文检索之后(使用自定义支持中文的全文索引过程),设置增量入库数据同步更新到索引即可(索引的重建如果做不好优化将会比较费时)。 三、架构方案选择优先级 方案选用优先级: 1、红色(自带功能更便捷,对于中文检索的支持较差) 2、蓝色(检索服务更完备但是需要额外安装维护全文检索服务) 3、绿色(检索结果更可控精准可自主研发,优化具有一定的难度) 原文地址:https://blog.csdn.net/superman_xxx/article/details/89502377 来源: https://www.cnblogs.com/jpfss/p/11394000.html

Neo4j全文检索

微笑、不失礼 提交于 2019-11-28 05:09:19
全文检索基本概念 搜索 搜索这个行为是用户与搜索引擎的一次交互过程,用户需要找一些数据,他提供给搜索引擎一些约束条件.搜索引擎通过约束条件抽取一些结果给用户 搜索引擎 搜索引擎存在的目的是存储,查找和获取数据.Neo4j用的搜索引擎是 Lucene 文档 在搜索软件中,文档是一等公民.存储,搜索,显示都是以文档为核心.文档简单可以理解为数据库中的一行数据,但是这行数据包括了field name. 倒排索引 倒排索引是搜索引擎中核心数据结构.简而言之,它将所有文档变成像是一本书后面词汇表的东西. 通过这种数据结构能够快速的从一个单词找到文档 Lucene搜索语法 Query implementation Purpose Example TermQuery 单词匹配 neo4j PhraseQuery 短语匹配 "graph database" RangeQuery 范围匹配 [A TO Z] {A TO Z} WildcardQuery 正则匹配 g*p?, d??abase PrefixQuery 前缀匹配 algo* FuzzyQuery 后缀匹配 cipher~ BooleanQuery 查询条件聚合 graph AND "shortest path" 环境准备 容器启动Neo4j docker run -p 17687:7687 -p 17474:7474 --name

Elasticsearch由浅入深(一)

随声附和 提交于 2019-11-27 18:56:42
什么是Elasticsearch 什么是搜索 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻(提到搜索的第一印象),百度 != 搜索 垂直搜索(站内搜索) 互联网的搜索:电商网站,招聘网站,新闻网站,各种app IT系统的搜索:OA软件,办公自动化软件,会议管理,日程管理,项目管理,员工管理,搜索“张三”,“张三儿”,“张小三”;有个电商网站,卖家,后台管理系统,搜索“牙膏”,订单,“牙膏相关的订单” 搜索,就是在任何场景下,找寻你想要的信息,这个时候,会输入一段你要搜索的关键字,然后就期望找到这个关键字相关的有些信息 如果用数据库做搜索会怎么样 做软件开发的话,或者对IT、计算机有一定的了解的话,都知道,数据都是存储在数据库里面的,比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息,等等吧。所以说,很自然的一点,如果说从技术的角度去考虑,如何实现如说,电商网站内部的搜索功能的话,就可以考虑,去使用数据库去进行搜索。 比方说,每条记录的指定字段的文本,可能会很长,比如说“商品描述”字段的长度,有长达数千个,甚至数万个字符,这个时候,每次都要对每条记录的所有文本进行扫描,懒判断说,你包不包含我指定的这个关键词(比如说“牙膏”) 还不能将搜索词拆分开来

全文检索引擎sphinx 与 Elasticsearch 索引速度对比

↘锁芯ラ 提交于 2019-11-27 07:20:27
sphinx的特色之一是建立索引速度快,最近转投Elasticsearch后,一直想做个对比,网上资料常见说法是10倍的差距。 测试环境 硬件:单核,2G内存的E5-2630 虚拟机 操作系统:Centos 6.5 版本 sphinx 版本:coreseek 4.1(基于sphinx 2.02) Elasticsearch 版本:2.3.1 mysql 版本:5.6 分词器(均使用默认的分词词库) mmseg:coreseek自带 ik:Elasticsearch 插件 索引数据源 数据库:mysql 数据量:46万+篇文章,约为1.6G数据 建立索引的字段:id,title,content Elasticsearch 使用插件:Elasticsearch-jdbc 2.3.1 Elasticsearch 集群设置 为了尽可能接近单机测试,Elasticsearch 仅开启一个服务节点(本地),且索引不做分片,不做副本。 测试情况 sphinx 每秒处理数据量:2.77 MB 每秒处理文档数:1277 篇 截图-sphinx Elasticsearch 每秒处理数据量:0.794 MB 每秒处理文档数:397 篇 截图-Elasticsearch(kibana 监控) 测试结论 sphinx 索引速度确实相对比较快,可能是环境的差异,未达到官方所说的10M/s 的索引速度;