赞
踩
目录
1.2.1 站内搜索(垂直搜索):数据量小,简单搜索,可以使用数据库。
1.2.2 互联网搜索,肯定不会使用数据库搜索。数据量太大,属于PB级。
ElasticSearch与Solr比较
(1)当单纯的对已有数据进行搜索时,Solr更快
(2)当实时建立索引时,Solr会产生io阻塞,查询性能较差,ElasticSearch具有明显的优势。
(3)随着数据量的增加,Solr的搜索效率会变的更低,而ElasticSearch却没有明显的变化。
总结:
1、ES基本是开箱即用(解压就可以用!)非常简单。Solr安装略微复杂一丢丢!
2、Solr 利用Zookeeper进行分布式管理,而Elasticsearch<mark>自身带有分布式协调管理功能</mark>。
3、Solr 支持更多格式的数据,比如JSON、XML、 CSV ,而Elasticsearch仅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana友好支撑。
5、Solr 查询快,但更新索引时慢(即插入删除慢) ,用于电商等查询多的应用; ES建立索引快(即查询慢) ,即实时性查询快,用于facebook新浪等搜索。
6、Solr是传统搜索应用的有力解决方案,但Elasticsearch更适用于新兴的实时搜索应用。
7、Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。
国外:
维基百科,类似百度百科,“网络七层协议”的维基百科,全文检索,高亮,搜索推荐。
Stack Overflow(国外的程序讨论论坛),相当于程序员的贴吧。遇到问题去上面发帖,热心网友下面回帖解答。
GitHub(开源代码管理),搜索上千亿行代码。
电商网站,检索商品。
日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logst-
tash+kibana)
商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户,比如说订阅《java编程思想》的监控,如果价格低于27块钱,就通知我,我就去买。
BI系统,商业智能(Business Intelligence)。大型连锁超市,分析全国网点传回的数据,分析各个商品在什么季节的销售量最好、利润最高。成本管理,店面租金、员工工资、负债等信息进行分析。从而部署下一个阶段的战略目标。
国内:
百度搜索,第一次查询,使用es。
OA、ERP系统站内搜索
ES:搜索的一款数据库,支持的数据格式json
解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务 。
注意: 9300 端口为 Elasticsearch 集群间组件的通信端口, 9200 端口为
浏览器访问的 http协议 RESTful 端口。
(1) PUT /索引名称/类型名称/1
{
数据
}
创建索引并往索引中添加一条文档(2)指定字段的类型(使用PUT)
类似于建库(建立索引和字段对应类型),也可看做规则的建立
PUT /索引名
PUT /wdqy151
{
"mappings":{
"properties": {
"name":{
"type": "text"
},
"age":{
"type": "integer"
}
}
}
}
字段数据类型
字符串类型
text、keyword
text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储;
keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持 聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8 类型的字符,可以通过设置ignore_above指定自持字符长度,超过给 定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
text: 它会为该字段的内容进行拆词操作,并放入倒排索引表中
keyword: 它不会进行拆词操作
使用match匹配查询---对匹配的关键字进行拆词操作,并和倒排索引表中对应。
使用term精准匹配---它不会对关键字进行拆词操作,而且把关键字作为一个整体和倒排索引表进行匹配
数值型
long、Integer、short、byte、double、float、half float、scaled float
日期类型
date
布尔类型
boolean
二进制类型
binary
等等......
GET /索引名
GET /_cat/indices?v
# 必须指定id的值
PUT /wdqy151/test/2
{
"name":"疏词",
"age":25
}# 不指定id
POST /wdqy151/test/
{
"name":"一帆",
"age":25
}
查询的提交方式必须为GET
GET /索引名称/类型名称/id值
DELETE /索引名
提交方式DELETE提交方式
根据不同的操作具有不同的提交方式restful风格
GET 查询
PUT 修改
POST 添加操作
DELETE 删除操作
#修改--这种修改必须要求指定所有列,如果只指定部分列,则原来其他列消失
PUT /wdqy151/test/2
{
"name":"小可",
"age":18
}PUT /wdqy151/test/2
{
"name":"小孟",
}#部分修改--不会丢失数据
POST /wdqy151/test/2/_update
{
"doc":{
"age":23
}
}
GET /wdqy151/test/_search
GET /索引名称/类型名称/_search?q=字段名:值
#根据年龄生成对应数据的json对象
GET /wdqy151/test/_search
{
"query": {
"match": {
"age":23
}
}
}
#指定查询部分列
GET /wdqy151/test/_search
{
"query": {
"match": {
"age":23
}
}
, "_source":["name"]
}
#分页查询数据
GET /wdqy151/test/_search
{
"query": {
"match": {
"age":23
}
},
"_source": ["name"],
"from": 0,
"size":3
}
#年龄大于23的查询出来,使用模糊查询
GET /wdqy151/test/_search
{
"query": {
"range": {
"age":{
"gt":23
}
}
},
"_source":["name","age"],
"from":0,
"size": 3
}
#按年龄降序排序
GET /wdqy151/test/_search
{
"query": {
"range": {
"age": {
"gt": 20
}
}
},
"_source": ["name","age"],
"from": 0,
"size": 5,
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
GET /wdqy151/test/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": 24
}
},
{
"match": {
"name": "雪"
}
}
]
}
}
}
GET /wdqy151/test/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"age": 28
}
},
{
"match": {
"name": "雪"
}
}
]
}
}
}
GET /wdqy151/test/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"age": 28
}
}
]
}
}
}
#查询出来的单字展现为红色
GET /wdqy151/test/_search
{
"query": {
"match": {
"name": "雪"
}
},
"highlight": {
"pre_tags": "<font color='red'>",
"post_tags": "</font>",
"fields": {
"name":{}
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。