笔者经过研究查阅solr官方相关资料经过两周的研究实现了毫秒级百万数据的搜索引擎的搭建并引入到企业门户。现将实施心得和步骤分享一下。
1. jdk1.6
安装jdk1.6到系统默认目录下X:\qc\Java目录下(注意要点:配置好环境变量)。
2. tomcat安装
a) 安装tomcat到X:\qc\tomcat6目录下。
b) 配置server.xml
Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"URIEncoding="UTF-8" />
3. 下载并部署solr1.4.1
a) 拷贝本地solr(注意该solr文件夹并非war包而是solr连接数据库的配置包)目录到目标服务器X:\qc目录下。
l data-onfig.xml
l solrconfig.xml
${solr.data.dir:f:/qc/solr/data}
f:/qc/solr/conf/data-config.xml
l schema.xml
field name="id" type="string" indexed="true" stored="true" required="true" />
b) 部署war包solr到tomcat下
在X:\qc\tomcat6\webapps下放置ache-solr-1.4.0\example\webapps\solr.war。
c) 配置solr.xml
l 创建目录X:\qc\Tomcat6\conf\Catalina\localhost。
l 增加solr.xml内容如下:
4. 启动f:\qc\tomcat6\bin\tomcat6.exe(带dos控制台)(注意这里tomcat安装时一定要改成tomcat6或者tomcat不能有横线或者空格否则可能导致solr无法正常索引哦)
5. 索引全部数据:http://127.0.0.1/solr/dataimport?command=full-import(可能需要重新刷一次窗口才能真正的索引全部数据哦)
6.测试url:http://127.0.0.1/solr/admin/如果可以看到solr管理界面说明搭建成功了
7.把如下代码copy到本地另存成jsp放到你的工程里就可以实现毫秒级搜索百万数据量啦:
BODY {
FONT-FAMILY: arial
}
TD {
FONT-FAMILY: arial
}
.p1 {
FONT-FAMILY: arial
}
.p2 {
FONT-FAMILY: arial
}
.i {
FONT-FAMILY: arial
}
BODY {
PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #000; PADDING-TOP: 6px; POSITION: relative; BACKGROUND-COLOR: #fff
}
INPUT {
PADDING-BOTTOM: 0px; PADDING-TOP: 0px; moz-box-sizing: border-box; webkit-box-sizing: border-box; box-sizing: border-box
}
TABLE {
BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px
}
TD {
FONT-SIZE: 9pt; LINE-HEIGHT: 18px
}
EM {
COLOR: #cc0000; FONT-STYLE: normal
}
A EM {
TEXT-DECORATION: underline
}
.f14 {
FONT-SIZE: 14px
}
.f10 {
FONT-SIZE: 10.5pt
}
.f16 {
FONT-SIZE: 16px; FONT-FAMILY: Arial
}
.c {
COLOR: #7777cc
}
.p1 {
MARGIN-LEFT: -12pt; LINE-HEIGHT: 120%
}
.p2 {
MARGIN-LEFT: -12pt; WIDTH: 100%; LINE-HEIGHT: 120%
}
.i {
FONT-SIZE: 16px; LINE-HEIGHT: 1.4em; HEIGHT: 24px
}
.t {
COLOR: #0000cc; TEXT-DECORATION: none
}
A.t:hover {
TEXT-DECORATION: underline
}
.p {
PADDING-LEFT: 18px; FONT-SIZE: 14px; MARGIN: 0px 0px 20px; WORD-SPACING: 4px
}
.f {
PADDING-LEFT: 15px; FONT-SIZE: 100%; WIDTH: 33.7em; WORD-BREAK: break-all; LINE-HEIGHT: 120%; WORD-WRAP: break-word
}
.h {
MARGIN-LEFT: 8px; WIDTH: 100%
}
.s {
PADDING-LEFT: 10px; WIDTH: 8%; HEIGHT: 25px
}
.m {
FONT-SIZE: 100%; COLOR: #666
}
A.m:link {
FONT-SIZE: 100%; COLOR: #666
}
A.m:visited {
COLOR: #660066
}
.g {
FONT-SIZE: 12px; COLOR: #008000
}
.r {
WIDTH: 238px; CURSOR: hand; WORD-BREAK: break-all
}
.bi {
MARGIN-BOTTOM: 12px; HEIGHT: 20px; BACKGROUND-COLOR: #d9e1f7
}
.pl {
PADDING-RIGHT: 2px; PADDING-LEFT: 3px; FONT-SIZE: 14px; HEIGHT: 8px
}
.Tit {
FONT-SIZE: 14px; Z-INDEX: 200; POSITION: relative; HEIGHT: 21px
}
.Tit A {
COLOR: #0000cc
}
.fB {
FONT-WEIGHT: bold
}
.mo {
FONT-SIZE: 100%; COLOR: #666666; LINE-HEIGHT: 10px
}
A.mo:link {
FONT-SIZE: 100%; COLOR: #666666; LINE-HEIGHT: 10px
}
A.mo:visited {
FONT-SIZE: 100%; COLOR: #666666; LINE-HEIGHT: 10px
}
.htb {
MARGIN-BOTTOM: 5px
}
#ft {
CLEAR: both; BACKGROUND: #e6e6e6; LINE-HEIGHT: 20px; TEXT-ALIGN: center
}
#ft {
FONT-SIZE: 12px; COLOR: #77c; FONT-FAMILY: Arial
}
#ft {
FONT-SIZE: 12px; COLOR: #77c; FONT-FAMILY: Arial
}
#ft SPAN {
COLOR: #666
}
FORM {
Z-INDEX: 9; MARGIN: 0px; POSITION: relative
}
.jc A {
COLOR: #cc0000
}
.btn {
FONT-SIZE: 14px; MARGIN-LEFT: 3px; WIDTH: 5.6em; PADDING-TOP: 2px; HEIGHT: 2em
}
.i {
VERTICAL-ALIGN: baseline
}
.btn {
VERTICAL-ALIGN: baseline
}
UNKNOWN {
TEXT-DECORATION: underline
}
#tb_mr {
Z-INDEX: 200; CURSOR: pointer; COLOR: #0000cc; POSITION: relative
}
#tb_mr B {
FONT-WEIGHT: normal; TEXT-DECORATION: underline
}
#tb_mr SMALL {
FONT-SIZE: 11px
}
#more {
BORDER-RIGHT: #9a99ff 1px solid; BORDER-TOP: #9a99ff 1px solid; DISPLAY: none; FONT-SIZE: 14px; Z-INDEX: 200; BACKGROUND: #fff; LEFT: 314px; OVERFLOW: hidden; BORDER-LEFT: #9a99ff 1px solid; WIDTH: 58px; BORDER-BOTTOM: #9a99ff 1px solid; POSITION: absolute; TOP: 22px; HEIGHT: 100px; outline: none
}
#more A {
PADDING-RIGHT: 0px; DISPLAY: block; PADDING-LEFT: 7px; PADDING-BOTTOM: 0px; WIDTH: 4em; COLOR: #0001cf; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 25%; TEXT-DECORATION: none
}
#more A SPAN {
FONT-FAMILY: "宋体"
}
#more A:hover {
BACKGROUND: #d9e1f6
}
#more DIV {
BACKGROUND: #ccccff; MARGIN: 0px 3px; OVERFLOW: hidden; HEIGHT: 1px
}
#out {
MARGIN-LEFT: 880px; ZOOM: 1
}
#in {
FLOAT: left; MARGIN-LEFT: -880px; POSITION: relative
}
#wrapper {
ZOOM: 1; min-width: 880px
}
#sx {
CURSOR: pointer; COLOR: #00c; TEXT-DECORATION: underline
}
#u {
FONT-SIZE: 12px; Z-INDEX: 210; RIGHT: 10px; MARGIN: 0px; WHITE-SPACE: nowrap; POSITION: absolute; TOP: 0px; TEXT-ALIGN: right
}
.result {
TABLE-LAYOUT: fixed; WIDTH: 34em
}
搜索引擎
搜索内容:
function xmlhttpPost(strURL) {
if(document.forms['f1'].q.value.length==0||document.forms['f1'].q.value.replace(/(^\s*)|(\s*$)/g,"")=="")
{
alert("请输入您要检索的内容...");
return false;
}
var xmlHttpReq = false;
var self = this;
if (window.XMLHttpRequest) { // Mozilla/Safari
self.xmlHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
var params = getstandardargs().concat(getquerystring());
var strData = params.join('&');
var header = document.getElementById("response");
//header.innerHTML = strURL '?' strData;
self.xmlHttpReq.open('get', strURL '?' strData '&time=' new Date().getTime(), true);
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
self.xmlHttpReq.onreadystatechange = function() {
if (self.xmlHttpReq.readyState == 4) {
updatepage(self.xmlHttpReq.responseText);
}
}
self.xmlHttpReq.send(null);
}
function getstandardargs() {
var params = [
'wt=json'
, 'indent=on'
, 'hl=true'
, 'hl.fl='
, 'fl=*,score'
, 'start=0'
, 'rows=100'
];
return params;
}
function getquerystring() {
var form = document.forms['f1'];
var query = form.q.value;
qstr = 'q=' encodeURI(query); //escape
return qstr;
}
// this function does all the work of parsing the solr response and updating the page.
function updatepage(str){
//document.getElementById("response").innerHTML = str;
var rsp = eval("(" str ")");
// use eval to parse Solr's JSON response
//eval拼接返回一个合理的字符串
parse(rsp);
}
function parse(j) {
var header = document.getElementById("header");
var rh = j.responseHeader;
var header_str = " 搜索关键字: \"" rh.params.q "\", 共为您找到: " j.response.numFound "条相关的数据, 耗时: " rh.QTime "ms";
header.innerHTML = "" " " header_str "";
var docs = j.response.docs;
$.pagination('pages',1,12, docs.length, test, docs);
}
function test(e)
{
$.pagination('pages', e.data.current, e.data.pagination.pageSize, e.data.pagination.totalRecord,test,e.data.docs)
}
引用:http://blog.chinaunix.net/uid-25723371-id-3221379.html
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com