
正文
linuxsolr命令 linuxls命令详解
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
如何用Solr搭建大数据查询平台
0×00 开头照例扯淡
自从各种脱裤门事件开始层出不穷,在下就学乖了,各个地方的密码全都改成不一样的,重要帐号的密码定期更换,生怕被人社出祖宗十八代的我,甚至开始用起了假名字,我给自己起一新网名”兴才”,这个看起来还不错的名字,其实是我们家乡骂人土话,意思是脑残人士…. -_-|||额好吧,反正是假的,不要在意这些细节。
这只是名,至于姓氏么,每个帐号的注册资料那里,照着百家姓上赵钱孙李周吴郑王的依次往下排,什么张兴才、李兴才、王兴才……于是也不知道我这样”兴才”了多久,终于有一天,我接到一个陌生电话:您好,请问是马兴才先生吗?
好么,该来的终于还是来了,于是按名索骥,得知某某网站我用了这个名字,然后通过各种途径找,果然,那破站被脱裤子了。
果断Down了那个裤子,然后就一发不可收拾,走上了收藏裤子的不归路,直到有一天,我发现收藏已经非常丰富了,粗略估计得好几十亿条数据,拍脑袋一想,这不能光收藏啊,我也搭个社工库用吧……
0×01 介绍
社工库怎么搭呢,这种海量数据的东西,并不是简单的用mysql建个库,然后做个php查询select * from sgk where username like ‘%xxxxx%’这样就能完事的,也不是某些幼稚骚年想的随便找个4g内存,amd双核的破电脑就可以带起来的,上面这样的语句和系统配置,真要用于社工库查询,查一条记录恐怕得半小时。好在这个问题早就被一种叫做全文搜索引擎的东西解决了,更好的消息是,全文搜索引擎大部分都是开源的,不需要花钱。
目前网上已经搭建好的社工库,大部分是mysql+coreseek+php架构,coreseek基于sphinx,是一款优秀的全文搜索引擎,但缺点是比较轻量级,一旦数据量过数亿,就会有些力不从心,并且搭建集群做分布式性能并不理想,如果要考虑以后数据量越来越大的情况,还是得用其他方案,为此我使用了solr。
Solr的基础是著名的Lucene框架,基于java,通过jdbc接口可以导入各种数据库和各种格式的数据,非常适合开发企业级的海量数据搜索平台,并且提供完善的solr cloud集群功能,更重要的是,solr的数据查询完全基于http,可以通过简单的post参数,返回json,xml,php,python,ruby,csv等多种格式。
以前的solr,本质上是一组servlet,必须放进Tomcat才能运行,从solr5开始,它已经自带了jetty,配置的好,完全可以独立使用,并且应付大量并发请求,具体的架构我们后面会讲到,现在先来进行solr的安装配置。
0×02 安装和配置
以下是我整个搭建和测试过程所用的硬件和软件平台,本文所有内容均在此平台上完成:
软件配置: solr5.5,mysql5.7,jdk8,Tomcat8 Windows10/Ubuntu14.04 LTS
硬件配置: i7 4770k,16G DDR3,2T西数黑盘
2.1 mysql数据库
Mysql数据库的安装和配置我这里不再赘述,只提一点,对于社工库这种查询任务远远多于插入和更新的应用来说,最好还是使用MyISAM引擎。
搭建好数据库后,新建一个库,名为newsgk,然后创建一个表命名为b41sgk,结构如下:
id bigint 主键 自动增长
username varchar 用户名
email varchar 邮箱
password varchar 密码
salt varchar 密码中的盐或者第二密码
ip varchar ip、住址、电话等其他资料
site varchar 数据库的来源站点
接下来就是把收集的各种裤子全部导入这个表了,这里推荐使用navicat,它可以支持各种格式的导入,具体过程相当的枯燥乏味,需要很多的耐心,这里就不再废话了,列位看官自己去搞就是了,目前我初步导入的数据量大约是10亿条。
2.2 Solr的搭建和配置
首先下载solr:
$ wget
解压缩:
$ tar zxvf solr-5.5.0.tgz
安装jdk8:
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default
因为是java跨平台的,Windows下和linux下solr是同一个压缩包,windows下jdk的安装这里不再说明。
进入解压缩后的solr文件夹的bin目录,solr.cmd和solr分别是windows和linux下的启动脚本:
因为社工库是海量大数据,而jvm默认只使用512m的内存,这远远不够,所以我们需要修改,打开solr.in.sh文件,找到这一行:
SOLR_HEAP=”512m”
依据你的数据量,把它修改成更高,我这里改成4G,改完保存. 在windows下略有不同,需要修改solr.in.cmd文件中的这一行:
set SOLR_JAVA_MEM=-Xms512m -Xmx512m
同样把两个512m都修改成4G。
Solr的启动,重启和停止命令分别是:
$ ./solr start
$ ./solr restart –p 8983
$ ./solr stop –all
在linux下还可以通过install_solr_service.sh脚本把solr安装为服务,开机后台自动运行。
Solr安装完成,现在我们需要从mysql导入数据,导入前,我们需要先创建一个core,core是solr的特有概念,每个core是一个查询、数据,、索引等的集合体,你可以把它想象成一个独立数据库,我们创建一个新core:
在solr-5.5.0/server/solr子目录下面建立一个新文件夹,命名为solr_mysql,这个是core的名称,在下面创建两个子目录conf和data,把solr-5.5.0/solr-5.5.0/example/example-DIH/solr/db/conf下面的所有文件全部拷贝到我们创建的conf目录中.接下来的配置主要涉及到三个文件, solrconfig.xml, schema.xml和db-data-config.xml。
首先打开db-data-config.xml,修改为以下内容:
dataConfig
dataSource name="sgk" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/newsgk" user="root" password="password" batchSize="-1" /
document name="mysgk"
entity name="b41sgk" pk="id" query="select * from b41sgk"
field column="id" name="id"/
field column="username" name="username"/
field column="email" name="email"/
field column="password" name="password"/
field column="salt" name="salt"/
field column="ip" name="ip"/
field column="site" name="site"/
/entity
/document
/dataConfig
这个文件是负责配置导入数据源的,请按照mysql实际的设置修改datasource的内容,下面entity的内容必须严格按照mysql中社工库表的结构填写,列名要和数据库中的完全一样。
然后打开solrconfig.xml,先找到这一段:
schemaFactory class="ManagedIndexSchemaFactory"
bool name="mutable"true/bool
str name="managedSchemaResourceName"managed-schema/str
/schemaFactory
把它全部注释掉,加上一行,改成这样:
!-- schemaFactory class="ManagedIndexSchemaFactory"
bool name="mutable"true/bool
str name="managedSchemaResourceName"managed-schema/str
/schemaFactory--
schemaFactory class="ClassicIndexSchemaFactory"/
这是因为solr5 以上默认使用managed-schema管理schema,需要更改为可以手动修改。
然后我们还需要关闭suggest,它提供搜索智能提示,在社工库中我们用不到这样的功能,重要的是,suggest会严重的拖慢solr的启动速度,在十几亿数据的情况下,开启suggest可能会导致solr启动加载core长达几个小时!
同样在solrconfig.xml中,找到这一段:
searchComponent name="suggest" class="solr.SuggestComponent"
lst name="suggester"
str name="name"mySuggester/str
str name="lookupImpl"FuzzyLookupFactory/str !-- org.apache.solr.spelling.suggest.fst --
str name="dictionaryImpl"DocumentDictionaryFactory/str !-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --
str name="field"cat/str
str name="weightField"price/str
str name="suggestAnalyzerFieldType"string/str
/lst
/searchComponent
requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"
lst name="defaults"
str name="suggest"true/str
str name="suggest.count"10/str
/lst
arr name="components"
strsuggest/str
/arr
/requestHandler
把这些全部删除,然后保存solrconfig.xml文件。
接下来把managed-schema拷贝一份,重命名为schema.xml (原文件不要删除),打开并找到以下位置:
只保留_version_和_root_节点,然后把所有的field,dynamicField和copyField全部删除,添加以下的部分:
field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" /
field name="username" type="text_ik" indexed="true" stored="true"/
field name="email" type="text_ik" indexed="true" stored="true"/
field name="password" type="text_general" indexed="true" stored="true"/
field name="salt" type="text_general" indexed="true" stored="true"/
field name="ip" type="text_general" indexed="true" stored="true"/
field name="site" type="text_general" indexed="true" stored="true"/
field name="keyword" type="text_ik" indexed="true" stored="false" multiValued="true"/
copyField source="username" dest="keyword"/
copyField source="email" dest="keyword"/
uniqueKeyid/uniqueKey
这里的uniqueKey是配置文件中原有的,用来指定索引字段,必须保留。新建了一个字段名为keyword,它的用途是联合查询,即当需要同时以多个字段做关键字查询时,可以用这一个字段名代替,增加查询效率,下面的copyField即用来指定复制哪些字段到keyword。注意keyword这样的字段,后面的multiValued属性必须为true。
username和email以及keyword这三个字段,用来检索查询关键字,它们的类型我们指定为text_ik,这是一个我们创造的类型,因为solr虽然内置中文分词,但效果并不好,我们需要添加IKAnalyzer中文分词引擎来查询中文。在下载IKAnalyzer for solr5的源码包,然后使用Maven编译,得到一个文件IKAnalyzer-5.0.jar,把它放入solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后在solrconfig.xml的fieldType部分加入以下内容:
fieldType name="text_ik" class="solr.TextField"
analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/
analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/
/fieldType
保存后,core的配置就算完成了,不过要导入mysql数据,我们还需要在mysql网站上下载mysql-connector-java-bin.jar库文件,连同solr-5.5.0/dist目录下面的solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar两个文件,全部拷贝到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目录中,然后重启solr,就可以开始数据导入工作了。
相关问答
Q1: 如何在 Ubuntu 14/15 上配置 Apache Solr-Linux中国
1)System Update 系统更新
使用一个具有 sudo 权限的非 root 用户登录你的 Ubuntu 服务器,在接下来的所有安装和使用 Solr 的步骤中都会使用它。
登录成功后,使用下面的命令,升级你的系统到最新的更新及补丁:
$ sudo apt-get update
2) 安装 JRE
要安装 Solr,首先需要安装 JRE (Java Runtime Environment) 作为基础环境,因为 solr 和 tomcat 都是基于Java.所以,我们需要安装最新版的 Java 并配置 Java 本地环境.
要想安装最新版的 Java 8,我们需要通过以下命令安装 Python Software Properties 工具包
$ sudo apt-get install python-software-properties
完成后,配置最新版 Java 8的仓库
$ sudo add-apt-repository ppa:webupd8team/java
现在你可以通过以下命令更新包源列表,使用‘apt-get’来安装最新版本的 Oracle Java 8。
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
在安装和配置过程中,点击'OK'按钮接受 Java SE Platform 和 JavaFX 的Oracle 二进制代码许可协议Oracle Binary Code License Agreement。
在安装完成后,运行下面的命令,检查是否安装成功以及查看安装的版本。
kash@solr:~$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
执行结果表明我们已经成功安装了 Java,并达到安装 Solr 最基本的要求了,接着我们进行下一步。
安装 Solr
有两种不同的方式可以在 Ubuntu 上安装 Solr,在本文中我们只用最新的源码包来演示源码安装。
要使用源码安装 Solr,先要从官网下载最新的可用安装包。复制以下链接,然后使用 'wget' 命令来下载。
$ wget
运行下面的命令,将这个已归档的服务解压到 /bin 目录。
$ tar -xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2
运行脚本来启动 Solr 服务,这将会先创建一个 solr 的用户,然后将 Solr 安装成服务。
$ sudo bash ./install_solr_service.sh solr-5.3.1.tgz
Solr 安装
使用下面的命令来检查 Solr 服务的状态。
$ service solr status
Solr 状态
创建 Solr 集合:
我们现在可以使用 Solr 用户添加多个集合。就像下图所示的那样,我们只需要在命令行中指定集合名称和指定其配置集就可以创建多个集合了。
$ sudo su - solr -c "/opt/solr/bin/solr create -c myfirstcollection -n data_driven_schema_configs"
创建集合
我们已经成功的为我们的第一个集合创建了新核心实例目录,并可以将数据添加到里面。要查看库中的默认模式文件,可以在这里找到: '/opt/solr/server/solr/configsets/datadrivenschema_configs/conf' 。
使用 Solr Web
可以使用默认的端口8983连接 Apache Solr。打开浏览器,输入 或者 . 确保你的防火墙允许8983端口.
Web访问Solr
在 Solr 的 Web 控制台左侧菜单点击 'Core Admin' 按钮,你将会看见我们之前使用命令行方式创建的集合。你可以点击 'Add Core' 按钮来创建新的核心。
添加核心
就像下图中所示,你可以选择某个集合并指向文档来向里面添加内容或从文档中查询数据。如下显示的那样添加指定格式的数据。
{
"number": 1,
"Name": "George Washington",
"birth_year": 1989,
"Starting_Job": 2002,
"End_Job": "2009-04-30",
"Qualification": "Graduation",
"skills": "Linux and Virtualization"
}
添加文件后点击 'Submit Document'按钮.
Q2: solr命令怎么执行
bin/solr -help
可以看到solr有哪些子命令,如 start, stop, restart, status, healthcheck, create, create_core, create_collection, delete, version启动startbin/solr start -help 查看start帮助
bin/solr start 启动单机版bin/solr start -f 前台启动bin/solr start -p 8984 指定端口启动bin/solr start -cloud 启动分布式版本bin/solr start -e cloud -noprompt -e表示要启动一个现有的例子,例子名称是cloud,cloud这个例子是以SolrCloud方式启动的bin/solr restart 重启项目
Q3: Linux里面es和Solr区别是什么?
1.查询性能不同。当实时建立索引的时候,solr会产生io阻塞,而es则不会,es查询性能要高于solr;
2.检索效率不同。在不断动态添加数据的时候,solr的检索效率会变的低下,而es则没有什么变化;
3.管理方式不同。Solr利用zookeeper进行分布式管理,而es自身带有分布式系统管理功能。Solr一般都要部署到web服务器上;
4.文件格式不同。Solr支持更多的格式数据[xml,json,csv等],而es仅支持json文件格式;
Q4: linux怎样设置solr开机启动
linux系统开机启动脚本 /etc/init.d
里面添加linuxsolr命令你linuxsolr命令的程序启动命令。
Q5: linux环境如何查看文件编码和如何实现编码转换
处于linux命令,想在linux系统中处理一些表格信息,但是在linux输入cat solr |head -2中文字符出现乱码,百度之后才知道linux下文件编码必须是utf-8中文字符才不会出现乱码。经过多方求助,才得知解决方法。
linux环境如何查看文件编码:
file filename
file是命令,filename是文件名
可以从上图看出solr.txt的编码是utf-16,所以要转换成utf-8。
linux环境如何实现编码转换:
iconv -f utf-8 -t utf-16 keyword -o keyword1
iconv -f 源文件格式 -t 想要转成的格式 文件名 -o 输出文件名
上图所示,中文字符乱码经过转换之后可以输出正常的中文字符。
linuxsolr命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linuxls命令详解、linuxsolr命令的信息别忘了在本站进行查找喔。






