月度归档:2012 年四月

bash shell获取命令执行状态

通过 $? 获取上一次命令执行的结果,0表示成功,非0表示失败。

test -e /home/tom
if [ $? -eq 0 ]; then
cd /home/tom
echo “I come here”
else
mkdir /home/tom
echo “It’s created”
fi

也可以先将结果赋给一个变量 ret=`echo $?`,然后再判断变量的值是否为0。

Sphinx 1.10 实时索引实现——sphinx新特性体验[转]

在2010.7.19,sphinx 1.10-beta 正式发布。本人当时做了一些很简单的测试,体验了一下其实时索引及字符串属性,今天因工作需求,再次使用
sphinx,详细的测试了一下这两个功能。并做一些记录,以供日后查询!

warning:这里只是简单的体验记录及发现的一些问题,并非指南。如需操作,请根据自己的环境调试!

1、软件:sphinx-1.10-beta-win32.zip

下载地址:http://www.sphinxsearch.com/downloads/sphinx-1.10-beta-win32.zip
系统:windows xp
2、安装配置

sphinx window下不需要安装,直接配置即可
解压 sphinx-1.10-beta-win32.zip 至 E:\sphinxserver\sphinx-1.10
复制 E:\sphinxserver\sphinx-1.10\sphinx-min.conf.in E:\sphinxserver\sphinx-1.10\sphinx.conf
编辑sphinx.conf 配置参数
[shell]
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

index testrt
{
type = rt
rt_mem_limit = 128M

path = E:/sphinxserver/sphinx-1.10/data/testrt

//utf-8 编码设置,此处只采用一元切分
charset_type = utf-8
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
ngram_chars = U+3000..U+2FA1F

//实时索引的字段、属性
rt_field = title
rt_field = content
rt_attr_uint = gid

//字符串属性
rt_attr_string = content
rt_attr_string = title

}

indexer
{
mem_limit = 128M
}

searchd
{
listen = 9312 #searchd 端口

# 实时索引监听端口,这些采用mysql 41协议,从0.9.9-rc2开始,sphinx searchd守护进程支持mysql二进制网络协议
# 并可通过标准的mysql api存取数据

listen = 9306:mysql41

log = E:/sphinxserver/sphinx-1.10/data/log/searchd.log #自己在对应目录下建立 data和log目录
query_log = E:/sphinxserver/sphinx-1.10/data/log/query.log
read_timeout = 5
max_children = 30
pid_file = E:/sphinxserver/sphinx-1.10/data/log/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
workers = threads # for RT to work
}
[/shell]
3、测试

开启服务端:sphinx 守护进程 searchd

E:\sphinxserver\sphinx-1.10\bin>searchd -c ../sphinx.conf

若无错误,运行并等待接收查询

客户端 :

a、在cli上测试:

C:\>mysql -P9306 -hlocalhost##注意,我的机器直接把mysql的路径注册在系统路径,所以直接使用mysql客户端,和以往的索引进程一样,这里不设置权限,若在生产中,请注意使用防火墙进行权限过滤

C:\>mysql -P9306 -hlocalhost

Welcome to the MySQL monitor.Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 1.10-beta (r2420)

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql>
#插入一条数据
mysql> insert into testrt(id,gid,title,content) values(1,1,’hello sphinx’,'this is sphinx test record’);

#查询刚才的结果

mysql> select * from testrt where match(‘sphinx’);
+——+——–+——+—————————-+————–+
| id | weight | gid| content| title|
+——+——–+——+—————————-+————–+
|1 | 2812 |1 | this is sphinx test record | hello sphinx |
+——+——–+——+—————————-+————–+
1 row in set (0.00 sec) #正确命中

mysql> select * from testrt where match(‘mysql’);
Empty set (0.00 sec)#没有查询到
Query OK, 1 row affected (0.00 sec)
###测试证明刚才的实时索引设置正确

b、在程序端(php)上测试:
[php]
<?php
header(‘Content-type:text/html;charset=utf-8′);
//这里我使用专门用来测试sphinx的中文数据
$link = mysql_connect(‘localhost’,'root’,'password’);
mysql_query(‘set names utf8′);
mysql_select_db(‘sphinx’,$link);
$sphinxLink = mysql_connect(‘localhost:9306′);

//测试数据
//获取real-time当前最大id
$maxRs = mysql_query(‘select * from testrt order by id desc limit 1 ‘);
$maxVal = mysql_result($maxRs,0,’id’);

$sets = mysql_query(‘select co_id,co_name,co_do from sph_comp limit 1,10000′,$link);
$i = $maxVal; ##此处必须使用最大值,否则会出现数据插入失败

##注意原先可以使用 insert into values (value),(value)的逗号分隔的值方式,但这里防止内存不足,每次都直接插入索引

while ($row=mysql_fetch_assoc($sets)) {
$sphinxSql = "insert into testrt(id,gid,title,content) values ($i,{$row['co_id']},’{$row['co_name']}’,'{$row['co_do']}’)";
$res = mysql_query($sphinxSql,$sphinxLink);
$i++;
}

//搜索测试,针对中文
$key = ‘商品信息’;
$sql = "select * from testrt where match(‘{$key}’)";
$rs = mysql_query($sql,$sphinx);
while ($row = mysql_fetch_assoc($rs)) {
print_r($row);
}
die;
?>
[/php]
运行后显示结果:

Array
(
[id] => 347
[weight] => 8588
[gid] => 208
[content] => 商品信息咨询服务。
[title] => 广州市越秀区姿营商品信息咨询服务部
)

至此整个操作完成(转自:http://www.sphinxsearch.org/archives/260)

本文链接:Sphinx 1.10 实时索引实现——sphinx新特性体验
详细出处:http://www.tcreator.info/webSchool/search-engine/sphinx-1.10.html

c#模拟点击[转]

网站www.ic2ic.com(这个网站是一个电子元件发布平台,免费的)
实现功能 第一次人工登录,自定义上传时间,周期上传数据(刷新自己的产品,让产品排的更高位)
判断是否网络正常
[csharp]
private bool IsConnectedToInternet()
{
int Desc;
return internet.InternetGetConnectedState(out Desc, 0);
}
设置默认页面:
webBrowser1.Navigate(new Uri("http://www.ic2ic.com/copy.jsp"));
登录代码:
private void btnlogin_Click(object sender, EventArgs e)
{
webBrowser1.document.getElementByIdx_xx("id").InnerText =txtuser.Text.ToString().Trim();//fill name
webBrowser1.document.getElementByIdx_xx("passwd").InnerText =txtpwd.Text.ToString().Trim();//fill pwd
HtmlElement formLogin = webBrowser1.Document.Forms["frmLogin"];

formLogin.InvokeMember("submit");
Thread.Sleep(5000);
herfclick("http://www.ic2ic.com/upload.jsp");//这是登录成功的操作,跳转到//upload.asp
//注意不是直接跳过去的,模拟点击链接
//SESSION不会丢失
herfclick("http://www.ic2ic.com/copy.jsp");
}

模拟点击链接:
private void herfclick(string url)
{
for (int i = 0; i < webBrowser1.Document.All.Count; i++)
{
if (webBrowser1.Document.All[i].TagName == "A" && webBrowser1.Document.All[i].GetAttribute("href").ToString().Trim() ==url)
{
webBrowser1.Document.All[i].InvokeMember("click");//引发”CLICK”事件
break;
}
}

}
运行网页中的JS函数
private void callJsMethod(string jsfun,string jsParameter)//函数名字,函数参数
{
HtmlDocument doc = webBrowser1.Document;
doc.InvokeScript(jsfun,new object[]{jsParameter});
}
填充数据:
private void filldate(string txt)
{
HtmlElement frmWord = webBrowser1.Document.Forms["frmWord"];//找到from
HtmlElementCollection txtarea = frmWord.getElementsByTagName_r("TEXTAREA");
HtmlElementCollection radio = frmWord.getElementsByTagName_r("INPUT");
radio[2].InvokeMember("click");//选择radio控件
txtarea[0].InnerText = txt.ToString();
}
[/csharp]