
问题1: 查询title中包含"手机"的信息
SELECT * FROM goods WHERE title LIKE '%手机%'
使用模糊搜索,左边有通配符,不会走索引,会全表扫描,性能低
问题2:查询title中包含"我要买一部华为手机"的信息
SELECT * FROM goods WHERE title LIKE '%我要买一部华为手机%'
关系型数据库提供的查询,功能太弱
了解倒排索引的存储原理
使用新华字典查找汉字,先找到汉字的偏旁部首,再根据偏旁部首对应的目录(索引)找到目标汉字

ES样例
建立倒排索引的流程
首先对所有数据的内容进行拆分(分词),拆分成唯一的一个词语(词条Term)
然后建立词条和每条数据的对应关系(词条在文档出现的位置下标,出现频率),如下所示
| (Term 词条) | (Doc ID,Freq 频率) | (Pos 位置) |
|---|---|---|
| we | (0,1) (1,1) | (0,0)(1,0) |
| like | (0,1) (1,1) | (0,1)(1,1) |
| java | (0,3) | (2,3,4) |
| lucene | (1,3) | (2,3,4) |
小结
理解ElasticSearch存储和搜索原理


理解ElasticSearch和关系型数据库的区别以及分工

我们可以把传统关系型数据库MySQL和ElasticSearch进行一下对比
| MySQL | Elasticsearch | 说明 |
|---|---|---|
| Database | Index | 索引(index),就是文档的集合,类似数据库(Database) |
| Table | Type | 类型(Type),就是文档的类型,相当于数据库中的表(Table) |
| Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
| Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
| Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
| index | Everything is indexed | es对存储的所有数据都进行分词建立索引 |
| SQL | DSL(Domain Specification Lanuage) |
不难发现,两者均有其优势
因此在企业中,往往是两者结合使用

docker pull elasticsearch:7.4.1
命令
docker run -di --name=elasticsearch -p 9200:9200 -v /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" elasticsearch:7.4.1
端口映射:9200
文件夹映射:/usr/share/elasticsearch/plugins
添加环境变量,名为discovery.type=single-node
PS:可以暂时不用理解为什么映射这个文件夹,以及后面的"discovery.type=single-node"
如下所示

浏览器输入:http:宿主机IP:9200
如果发现启动失败问题(内存分配原因),可以参考下面这个链接
日常踩坑之elasticsearch docker 无法启动问题_不懂1417的博客-CSDN博客_docker无法启动elasticsearch]
也可以参考这个命令
sysctl -w vm.max_map_count=262144
docker run -di --name=elasticsearch -p 9200:9200 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -v /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /root/elasticsearch/data:/usr/share/elasticsearch/data elasticsearch:7.4.1
主要看ES_JAVA_OPTS=-Xms512m -Xmx512m
如果报错信息为:java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes,可以参考以下的博客
如何查看报错信息
docker logs 容器id

PS:如果访问不了,记得开放端口或者关闭防火墙

kibana是elasticsearch的页面可视化工具,类似MySQL的SQLyog等可视化工具
docker pull kibana:7.4.1
命令
docker run -id -p 5601:5601 --link elasticsearch --name=kibana -e "ELASTICSEARCH_URL=http://你的自己的ip地址:9200" kibana:7.4.0
如下所示


我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub