部署方法看上一偏配置说明。
代码 api.tar.gz
信息插入与修改:
查询:
http://192.168.138.29:8080/search.jsp?database=sunboyudata2&query=fid:QCNUMEQ:1604&skip=20000&max=10
database:数据库文件名[无扩展名]
query:查询条件 每组查询条件三个部分 字段:规则:值 每组之间用|分割
skip:记录起始
max:返回的记录条数
缺点:在频繁大数据量提交的时候,tomcat总是影响失败。性能没有预期那么好,tc需要优化。
]]>使用tc常用的工具就是作者另外写的一个api:tt http://fallabs.com/tokyotyrant/ 兼容memcached协议,非常好用和高效。
但这里我期望使用的是table表,它提供了C的接口,但没有php方便调用的的方式,所以张宴同学做了一个很方便的tcsql http://blog.s135.com/tcsql/
因为我C的水平问题,一直没有写出稳定的操作接口,并且张宴同学tcsql的设计理念非常好,支持分布式的结构。
因此我改变了设计思路,并且使用我想对熟悉的java接口来做这个事情。
linux下配置过程:
环境装备:标准JDK环境
1、下载java api http://fallabs.com/tokyocabinet/javapkg/
2、解压后进入 tokyocabinet-java-1.24 目录
3、运行 ./configure –prefix=/opt/tcjava && make && make install
4、环境变量配置:
这里是包含JDK的全部配置
export JAVA_HOME=/opt/jdk
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/opt/tcjava/lib/tokyocabinet.jar:/opt/tcjava/lib/libjtokyocabinet.so:/opt/tcjava/lib/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tcjava/lib/
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jrei
JAVA_OPTS="-server"
JAVA_OPTS="$JAVA_OPTS -Xms64m -Xmx128m"
JAVA_OPTS="$JAVA_OPTS -D64 -Djava.library.path=/usr/local/lib/"
把以上代码增加到 /etc/profile 文件尾部,而后 source /etc/profile
配置完成,开始测试:
进入 tokyocabinet-java-1.24/example 执行 make
然后运行 java TCTDBEX 如果看到跟代码中预期的结果,则tc的javaapi在此服务器上安装成功。
]]>前一个页面
Intent intent = new Intent(IndexappActivity.this, LoginappActivity.class);
intent.putExtra("test", "这是来自MainActivity的数据。");
startActivity(intent);
接受页面
Bundle extras = getIntent().getExtras();
String data = null;
if(extras != null)
{
data = extras.getString("test");
}
setTitle( data);
还有其他数据格式,不过这种意境够我用了,结贴
]]>三、打开拨号界面 ,类型是Intent.ACTION_DIAL
Uri uri = Uri.parse(“tel:10086″);
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
四、直接拨打电话,与三不同的是,这个直接拨打电话,而不是打开拨号界面
Uri uri = Uri.parse(“tel:10086″);
Intent intent = new Intent(Intent.ACTION_CALL, uri);
五、卸载一个应用,Intent的类别是Intent.ACTION_DELETE
Uri uri = Uri.fromParts(“package”, “xxx”, null);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);
六、安装应用程序,Intent的类别是Intent.ACTION_PACKAGE_ADDED
Uri uri = Uri.fromParts(“package”, “xxx”, null);
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, uri);
七、播放音频文件
Uri uri = Uri.parse(“file:///sdcard/download/everything.mp3″);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setType(“audio/mp3″);
八、打开发邮件界面
Uri uri= Uri.parse(“mailto:admin@3gstdy.com”);
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
九、发邮件,与八不同这里是将邮件发送出去,
Intent intent = new Intent(Intent.ACTION_SEND);
String[] tos = { “admin@3gstdy.com” };
String[] ccs = { “webmaster@3gstdy.com” };
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_TEXT, “I come from http://blog.3gstdy.com”);
intent.putExtra(Intent.EXTRA_SUBJECT, “http://blog.3gstdy.com”);
intent.setType(“message/rfc882″);
Intent.createChooser(intent, “Choose Email Client”);
//发送带附件的邮件
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
intent.putExtra(Intent.EXTRA_STREAM, “file:///sdcard/mysong.mp3″);
intent.setType(“audio/mp3″);
startActivity(Intent.createChooser(intent, “Choose Email Client”));
十、发短信
Uri uri= Uri.parse(“tel:10086″);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.putExtra(“sms_body”, “I come from http://blog.3gstdy.com”);
intent.setType(“vnd.android-dir/mms-sms”);
十一、直接发邮件
Uri uri= Uri.parse(“smsto://100861″);
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra(“sms_body”, “3g android http://blog.3gstdy.com”);
十二、发彩信
Uri uri= Uri.parse(“content://media/external/images/media/23″);
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(“sms_body”, “3g android http://blog.3gstdy.com”);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType(“image/png”);
十三、# Market 相关
1 //寻找某个应用
Uri uri = Uri.parse(“market://search?q=pname:pkg_name”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where pkg_name is the full package path for an application
2 //显示某个应用的相关信息
Uri uri = Uri.parse(“market://details?id=app_id”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
//where app_id is the application ID, find the ID
//by clicking on your application on Market home
//page, and notice the ID from the address bar
十四、路径规划
Uri uri = Uri.parse(“http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en”);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
import android.view.KeyEvent;
import android.app.AlertDialog;
import android.content.DialogInterface;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
AlertDialog.Builder dlg=new AlertDialog.Builder(this);
dlg.setTitle("Alert");
dlg.setMessage("退出?");
dlg.setPositiveButton("是", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
setResult(RESULT_OK);
finish();
}
});
dlg.setNegativeButton("不", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
dlg.show();
}
return super.onKeyDown(keyCode, event);
}
]]>
已经全部调试通过,正在往一个线上环境上部署。文档也在敢写之中,谢谢关注。
]]>下载:lucene_dz
欢迎加入QQ讨论群:41886598
]]>打包文件,可以看下边的功能呢个表:
| 功能 | 命令 |
| 用一个单独的文件创建一个 JAR 文件 | jar cf jar-file input-file… |
| 用一个目录创建一个 JAR 文件 | jar cf jar-file dir-name |
| 创建一个未压缩的 JAR 文件 | jar cf0 jar-file dir-name |
| 更新一个 JAR 文件 | jar uf jar-file input-file… |
| 查看一个 JAR 文件的内容 | jar tf jar-file |
| 提取一个 JAR 文件的内容 | jar xf jar-file |
| 从一个 JAR 文件中提取特定的文件 | jar xf jar-file archived-file… |
| 运行一个打包为可执行 JAR 文件的应用程序 | java -jar app.jar |
创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample 。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest 的文件,并在其中加入以下一行: Main-Class: com.mycompany.myapp.Sample
引用地址:http://www-128.ibm.com/developerworks/cn/java/j-jar/index.html
]]>编译后,我们在命令行进行查询:
E:\java>java Search php
40个结果
http://www.sunboyu.cn/?p=332
http://www.sunboyu.cn/?p=164
http://www.sunboyu.cn/?p=213
http://www.sunboyu.cn/?p=123
http://www.sunboyu.cn/?p=124
http://www.sunboyu.cn/?p=180
http://www.sunboyu.cn/?p=283
http://www.sunboyu.cn/?p=282
http://www.sunboyu.cn/?p=234
http://www.sunboyu.cn/?p=53
http://www.sunboyu.cn/?p=159
http://www.sunboyu.cn/?p=235
http://www.sunboyu.cn/?p=221
http://www.sunboyu.cn/?p=73
http://www.sunboyu.cn/?p=11
http://www.sunboyu.cn/?p=51
http://www.sunboyu.cn/?p=240
http://www.sunboyu.cn/?p=196
http://www.sunboyu.cn/?p=52
http://www.sunboyu.cn/?p=308
http://www.sunboyu.cn/?p=298
http://www.sunboyu.cn/?p=9
http://www.sunboyu.cn/?page_id=38
http://www.sunboyu.cn/?p=236
http://www.sunboyu.cn/?p=320
http://www.sunboyu.cn/?p=141
http://www.sunboyu.cn/?p=78
http://www.sunboyu.cn/?p=291
http://www.sunboyu.cn/?p=218
http://www.sunboyu.cn/?p=154
http://www.sunboyu.cn/?p=121
http://www.sunboyu.cn/?p=200
http://www.sunboyu.cn/?p=244
http://www.sunboyu.cn/?p=280
http://www.sunboyu.cn/?page_id=112
http://www.sunboyu.cn/?p=288
http://www.sunboyu.cn/?p=292
http://www.sunboyu.cn/?p=20
http://www.sunboyu.cn/?p=130
http://www.sunboyu.cn/?p=87
E:\java>
可以看到,当我们搜索关键词“php”,返回了所有存在php关键词的链接。
当然,这个只是个简单的演示,在创建索引的时候,我们使用了SimpleAnalyzer的方法,这个方法对中文,其实就是基于单字的分词,对于中文信息检索基本是没有意义的。Lucene提供了开发的源代码,因为,我们可以很方便得为其附加我们自己的中文分词方法。
]]>分析wordpress数据库结构,我们只需要为标题内容,即主要的文本内容创建索引即可。
具体语句为: SELECT ID,post_title,post_content,guid FROM wp_posts ORDER BY ID DESC
如下代码,mysql连接类用的上文的mysql类,代码风格还是很PHP。生成的索引全保存在当前的index文件夹下
E:\java\index 的目录
2008-10-16 14:40
.
2008-10-16 14:40 ..
2008-10-16 14:40 20 segments.gen
2008-10-16 14:40 98 segments_a4
2008-10-16 14:40 268,174 _a0.fdt
2008-10-16 14:40 2,600 _a0.fdx
2008-10-16 14:40 37 _a0.fnm
2008-10-16 14:40 20,990 _a0.frq
2008-10-16 14:40 1,304 _a0.nrm
2008-10-16 14:40 27,210 _a0.prx
2008-10-16 14:40 1,281 _a0.tii
2008-10-16 14:40 130,051 _a0.tis
2008-10-16 14:40 356 _a1.fdt
2008-10-16 14:40 8 _a1.fdx
2008-10-16 14:40 37 _a1.fnm
2008-10-16 14:40 23 _a1.frq
2008-10-16 14:40 8 _a1.nrm
2008-10-16 14:40 23 _a1.prx
2008-10-16 14:40 35 _a1.tii
2008-10-16 14:40 413 _a1.tis
2008-10-16 14:40 1,362 _a2.fdt
2008-10-16 14:40 8 _a2.fdx
2008-10-16 14:40 37 _a2.fnm
2008-10-16 14:40 74 _a2.frq
2008-10-16 14:40 8 _a2.nrm
2008-10-16 14:40 87 _a2.prx
2008-10-16 14:40 35 _a2.tii
2008-10-16 14:40 1,348 _a2.tis
26 个文件 455,627 字节
2 个目录 30,843,887,616 可用字节
E:\java\index
注释1:Field方法的在2.0.0版本中有5种方法,在2.3.2中增加到了7种,详细用法请参阅官方文档
http://lucene.apache.org/java/2_0_0/api/org/apache/lucene/document/Field.html
http://lucene.apache.org/java/2_3_2/api/org/apache/lucene/document/Field.html
Lucene的索引,基本结构为 Index->Document->Field 这样可以构建一个非关系型二维结构,由不同field构成的一个Document,由不同的Document构成的Index。
Lucene的Field方法很丰富,在2.0版本以后,由三种Field类型增加到了5种,支持三种数据流的传入方式(字符串,读取,二进制传入),支持数据的存储,索引,分词。
而我们使用Lucene的主要功能在于分词和生成索引。具体应用待详细使用后介绍。
]]>