当前位置:文档之家› 使用PHP+Sphinx建立高效的站内搜索引擎

使用PHP+Sphinx建立高效的站内搜索引擎

使用PHP+Sphinx建立高效的站内搜索引擎
使用PHP+Sphinx建立高效的站内搜索引擎

本文摘自CSDN乐知《草根》杂志第四期

1. 为什么要使用Sphinx

假设你现在运营着一个论坛,论坛数据已经超过100W,很多用户都反映论坛搜索的速度非常慢,那么这时你就可以考虑使用Sphinx了(当然其他的全文检索程序或方法也行)。

2. Sphinx是什么

Sphinx由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL

与商业协议双许可协议下发行。

全文检索是指以文档的全部文本信息作为检索对象的一种信息检索技术。检索的对象有可能是文章的标题,也有可能是文章的作者,也有可能是文章摘要或内容。

3. Sphinx的特性

l 高速索引 (在新款CPU上,近10 MB/秒);

l 高速搜索 (2-4G的文本量中平均查询速度不到0.1秒);

l 高可用性 (单CPU上最大可支持100 GB的文本,100M文档);

l 提供良好的相关性排名

l 支持分布式搜索;

l 提供文档摘要生成;

l 提供从MySQL内部的插件式存储引擎上搜索

l 支持布尔,短语, 和近义词查询;

l 支持每个文档多个全文检索域(默认最大32个);

l 支持每个文档多属性;

l 支持断词;

l 支持单字节编码与UTF-8编码;

4. 下载并安装Sphinx

打开网址https://www.doczj.com/doc/c113989178.html,/news/7/52/ 找到适合自己的操作系统的

版本,比如我是Windows那么我就可以下载Coreseek Win32通用版本,Linux 下可以下载源码包,自己编译安装。这里解释下为什么我们下载的程序叫Coreseek,Coreseek是基于 Sphinx开发的一款软件,对Sphinx做了一些改动,在中文方面支持得比Sphinx好,所以我们使用之。

下载完成后,将程序解压到你想解压的地方,比如我就想解压到E盘根目录,之后修改目录名为Coreseek,大功告成Coreseek安装完成了,安装的目录是在E:\coreseek\。

5. 使用Sphinx

我要使用Sphinx需要做以下几件事

1) 首先得有数据

2) 建立Sphinx配置文件

3) 生成索引

4) 启动Sphinx

5) 使用之(调用api或search.exe程序进行查询)

第1件:(导入数据)

我们建立测试所需要用到得数据库、表以及数据,篇幅有限,这些在附件中都有,下载后导入MySQL即可。

第2件:(建立配置文件)

接下来我们需要建立一个Sphinx的配置文件 E:\coreseek\etc\mysql.conf,将其内容改为下面这些:

source mysql

{

type = mysql

sql_host = localhost

sql_user = root sql_pass = sql_db = test sql_port = 3306

sql_query_pre = SET NAMES utf8

sql_query = SELECT

id,addtime,title,content FROM post

sql_attr_timestamp = addtime

}

index mysql

source = mysql

path =

E:/coreseek/var/data/mysql

charset_dictpath = E:/coreseek/etc/

charset_type = zh_cn.utf-8

}

searchd

{

listen = 9312

max_matches = 1000

pid_file =

E:/coreseek/var/log/searchd_mysql.pid

log =

E:/coreseek/var/log/searchd_mysql.log

query_log =

E:/coreseek/var/log/query_mysql.log

}

先讲下这个配置文件中每项的含义。

source mysql{} 定义源名称为mysql,也可以叫其他的,比如:source xxx{} type 数据源类型

sql_* 数据相关的配置,比如sql_host,sql_pass什么的,这些不解释鸟

sql_query 建立索引时的查询命令,在这里尽可能不使用where或group by,将where与groupby的内容交给sphinx,由sphinx进行条件过滤与groupby效率会更高,注意:select 的字段必须包括一个唯一主键以及要全文检索的字段,where中要用到的字段也要select出来

sql_query_pre 在执行sql_query前执行的sql命令, 可以有多条

sql_attr 以这个开头的配置项,表示属性字段,在where,orderby,groupby中出现的字段要分别定义一个属性,定义不同类型的字段要用不同的属性名,比如上面的sql_attr_timestamp就是时间戳类型。

index mysql{} 定义索引名称为mysql,也可以叫其他的,比如:index xxx{} source 关联源,就是source xxx定义的。

path 索引文件存放路径,比如:E:/coreseek/var/data/mysql 实际存放在

E:/coreseek/var/data/目录,然后创建多个名称为mysql后缀却不同的索引文件

charset_dictpath 指明分词法读取词典文件的位置,当启用分词法时,为必填项。在使用LibMMSeg作为分词库时,需要确保词典文件uni.lib在指定的目录下

charset_type 字符集,比如charset_type = zh_cn.gbk

searchd{} sphinx守护进程配置

listen 监听端口

max_matches最大匹配数,也就是查找的数据再多也只返回这里设置的1000条pid_file pid文件路径

log全文检索日志

query_log查询日志

好了,配置文件就这样,配置的参数还有很多,大家可以自己查文档。

第3件:(生成索引)

开始 -> 运行 -> 输入cmd回车,打开命令行工具

e:\coreseek\bin\indexer --config e:\coreseek\etc\mysql.conf --all 这一串东西其实就是调用indexer程序来生成所有索引

如果只想对某个数据源进行索引,则可以这样:e:\coreseek\bin\indexer

--config e:\coreseek\etc\mysql.conf 索引名称(索引名称指配置文件中所定义的)

--config,--all这些都是indexer程序的参数,想了解更多参数的朋友可以查看文档

运行命令后如果你没看到FATAL,ERROR这些东西,那么索引文件就算生成成功了,比如我看到得就是

………省略………

using config file 'e:\coreseek\etc\mysql.conf'...

indexing index 'mysql'...

collected 4 docs, 0.0 MB

………省略………

第4件:(启动Sphinx)

同样命令行下

e:\coreseek\bin\searchd --config e:\coreseek\etc\mysql.conf

运行后提示了一大堆东西

using config file 'e:\coreseek\etc\mysql.conf'...

listening on all interfaces, port=9312

accepting connections

不用管这些鸟文是啥意思,反正Sphinx是启动好了。

现在有一串鸟文的这个命令行是不能关的,因为关了Sphinx也就关了,如果觉得这样不爽,可以将Sphinx安装成系统服务,在后台运行。

安装系统服务只需在命令行中输入以下命令

e:\coreseek\bin\searchd --config e:\coreseek\etc\mysql.conf --install

安装之后记得启动这个服务,不会启动那我没法,自己google。

第5步:(使用Sphinx)

在 web根目录下建立一个search目录(当然不在根目录也行,同样目录名也可以随取),复制E:\coreseek\api\ sphinxapi.php文件到search目录(sphinxapi.php这个是sphinx官方提供的api),开始php程序的编写。

在search目录建立一个文件,名字叫啥都行,我管它叫index.php,其内容如

include 'sphinxapi.php'; // 加载Sphinx API

$sc = new SphinxClient(); // 实例化Api

$sc->setServer('localhost', 9312); // 设置服务端,第一个参数sphinx服务器地址,第二个sphinx监听端口

$res = $sc->query('sphinx', 'mysql'); // 执行查询,第一个参数查询的关键字,第二个查询的索引名称,mysql索引名称(这个也是在配置文件中定义的),多个索引名称以,分开,也可以用*表示所有索引。

print_r($res);

打印结果:

Array

(

………省略………

[matches] => Array

(

[2] => Array

(

[weight] => 2

[attrs] => Array

(

[addtime] => 1282622004 )

)

[4] => Array

(

[weight] => 2

[attrs] => Array

(

[addtime] => 1282622079

)

)

)

………省略………

)

Matches 中就是查询的结果了,但是仿佛不是我们想要的数据,比如titile,content字段的内容就没有查询出来,根据官方的说明是Sphinx并没有连接到MySQL去取数据,只是根据它自己的索引内容进行计算,因此如果想用Sphinx 提供的API去取得我们想要的数据,还必须以查询的结果为依据,再次查询MySQL从而得到我们想要的数据。

查询结果中键值分别表示

2唯一主键

weight权重

attrs sql_attr_*中配置

至此,搜索引擎算是完成一大半了,剩下的大家可以自行完成。

比如:

$ids = array_keys($res['matches']); // 获取主键

$ids = join(',', $ids);

$query = mysql_query("SELECT * FROM post WHERE id IN ({$ids})"); while($row = mysql_fetch_assoc($query)) {

.....

}

编写钩子程序实例

编写钩子程序的步骤分为三步:定义钩子函数、安装钩子和卸载钩子。 1.定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。下面以鼠标钩子函数举例说明钩子函数的原型: LRESULT CALLBACK HookProc(int nCode ,WPARAM wParam,LPARAM lParam) 参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode包含有关消息本身的信息,比如是否从消息队列中移出。 我们先在钩子函数中实现自定义的功能,然后调用函数CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数。CallNextHookEx.的原型如下: LRESULT CallNextHookEx( HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam ) 参数hhk是钩子句柄。nCode、wParam和lParam 是钩子函数。 当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。 2.安装钩子 在程序初始化的时候,调用函数SetWindowsHookEx安装钩子。其函数原型为:HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) 参数idHook表示钩子类型,它是和钩子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等。 Lpfn是钩子函数的地址。 HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。 dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 SetWindowsHookEx返回所安装的钩子句柄。 3.卸载钩子 当不再使用钩子时,必须及时卸载。简单地调用函数BOOL UnhookWindowsHookEx( HHOOK hhk)即可。 值得注意的是线程钩子和系统钩子的钩子函数的位置有很大的差别。线程钩子一般在当前线程或者当前线程派生的线程内,而系统钩子必须放在独立的动态链接库中,实现起来要麻烦一些。 线程钩子的编程实例: 按照上面介绍的方法实现一个线程级的鼠标钩子。钩子跟踪当前窗口鼠标移动的位置变化信息。并输出到窗口。 (1)在VC++6.0中利用MFC APPWizard(EXE)生成一个不使用文档/视结构的单文档应用mousehook。打开childview.cpp 文件,加入全局变量: HHOOK hHook;//鼠标钩子句柄 CPoint point;//鼠标位置信息 CChildView *pV iew; // 鼠标钩子函数用到的输出窗口指针 在CChildView::OnPaint()添加如下代码: CPaintDC dc(this);

利用网站的“站内搜索”功能采集数据

利用网站的“站内搜索”功能采集数据V1.0四川大学电子信息学院信息安全文档编写与整理:liyawei 2014/9/26 概述 ●本文描述利用网站的“站内搜索”功能采集数据、以制作一个迷你的搜索引擎的原理和思路。 关于站内搜索 很多网站都有“站内搜索”功能来帮助用户检索站内信息。举例: 站内搜索功能的工作原理 ●以乌云网为例: ●在乌云站内搜索功能中搜索“XSS”时,返回以下页面:

●用HTTP报文截获工具观察这个过程,当在站内搜索的文本框内输入“XSS”并点击搜索时。浏览器向服务 器发送以下报文: 清晰的发现我们输入的数据在POST数据的参数q中。 ●返回报文中一般包含html源码 这个源代码就是搜索结果返回页面的源代码 ●我们需要采集的数据就在这源代码当中可以找到

如何在源码中提取数据 ●假设现在需要采集的数据如下 ●通过审查html代码,我们发现每个漏洞标题在以下标签中 漏洞标题 而且html中其他内容没有类似的格式。 ●那么就可以编写正则表达式 [^<]*<\/a> 来匹配 漏洞标题

并把匹配后的结果放入一数据结构中,该数据结构中的内容就包含我们需要提取的数据,在此处的“漏洞标题” 目标网站的搜索结果被分页时 ● ●当点击第二页的链接时,浏览器发出以下http请求报文: ●同理,服务器返回带有html源码的http响应报文,根据先前所说的思路提取出需要的数据 编程思路 ●手动截获http报文了解目标网站中站内搜索的工作,依照截获的报文构造很多http请求报文,根据相应的 响应报文的固定特点,使用正则表达式匹配出需要的内容。当然,以上只完成了数据收集过程,作为一个搜索引擎,还需要将采集的数据整理,并向用户显示。 ●软件的整体工作流程如下:

记一次键盘记录器的编写

新建win32项目 键盘记录器的思路 1.窗口消息处理的框架 一注册窗口类 MyRegisterClass 二实例化并创建窗口 InitInstance 三处理窗口消息 WndProc 2.改造窗口,让它隐藏 3.1 WM_CREATE是窗口创建函数 3.2 WM_DESTROY是窗口关闭函数 建立之初,程序默认窗口是显示的,所以会建立一个ShowWindow(hWnd, nCmdShow); 我们要让他隐藏,那就要改第二个参数ShowWindow(hWnd, SW_HIDE); 3.让这个程序运行起来了就开始监控按键操作,程序结束了就结束监控. 那么我们怎么知道程序什么时刻运行起来了呢,我们是根据其窗口的创建与关闭来判断 在建立项目之初,他没有帮我们写WM_CREATE函数,所以在处理窗口消息部分WndProc 中写入case WM_CREATE: …………………… //这一部分就是窗口建立之后所运行的程序,我们在这一部分就

开始 //写我们所要实现的记录功能,我们称之为钩子函数。 以下为建立钩子程序 这个函数我们要在解决方案里重新新建一个空项目keyhook,后选择动态程序dll(动态加载,而不是 直接运行),实现这个功能,我们只要在这里调用函数即可 在建立keyhook项目完成后要新建一个头文件和cpp文件,来实现钩子的功能 接下来在头文件自己定义两个函数来启动钩子bool installhook(); 和关闭钩子bool uninstallhook(); 并且复制到cpp文件中, 注意:要让其他文件用到这两个函数,必须要在头文件中将两个函数改写成 extern"C"_declspec(dllexport) bool installhook(); “C”是指这是c语言代码 _declspec是一个函数 dllexport参数是动态库导出 要在键盘记录器的cpp文件中使用这两个函数,所以要包含其头文件,注意,由于所要包含的是一个动态库,所以是#pragma comment(lib,"keyhook"),而不是以前的#include,除此之外还要导入动态库中的函数,也就是将函数在声明一遍,记住要改dllexport成dllimport,因为这是导入,不是导出,如下 #pragma comment(lib,"keyhook")//导入动态库 //导入动态库中的函数 //启动钩子 extern"C"_declspec(dllimport) bool installhook(); //自己定义的函数 //关闭钩子 extern"C"_declspec(dllimport) bool uninstallhook(); 然后就开始写钩子程序 要实现以下功能 //获取用户的按键消息 用到SetWindowsHookEx函数,要包含Windows.h的头文件 SetWindowsHookEx(WH_KEYBOARD,keyProc,GetModuleHandle(L"keyhook"),NULL); 第一个参数代表的是我们要获取键盘的消息 第二个参数就是自己定义的函数,就是监控这个消息之后你要做什么事情(在这里就是同时获取当前窗口的标题并同时获取当前按下的按键文本并保存到文件中),这个函数的类型是HOOKPROC,按下F12后是typedef LRESULT (CALLBACK* HOOKPROC)(int code, WPARAM wParam, LPARAM lParam); 在这里我们定义这个函数为keyProc来实现这两个功能但我们得要在头文件中声明这个函数,然后才能在cpp文件中使用 这个功能用如下程序来实现 LRESULT CALLBACK keyProc(int code, WPARAM wParam, LPARAM lParam){ char szWriteText[256]; //用来保存标题和文本 char szWindowTitle[256]; //保存标题 char szKeyText[256]; //保存文本 //并同时获取当前窗口的标题

c#钩子实例

C#键盘勾子(Hook)拦截器,屏蔽键盘活动 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 运行机制 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook 子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Ho ok类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Ho ok链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。 钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。 钩子子程必须按照以下的语法: LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam ); HookProc是应用程序定义的名字。 nCode参数是Hook代码,Hook子程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。

企业盈利能力的文献综述

有关企业盈利能力分析的文献综述 摘要 获取利润是企业的最终目的。也是投资者投资的基本目的。获利能力的大小显示着企业经营管理的成败和企业未来前景的好坏。企业必须能够获利才有存在的价值,建立企业的目的是赢利,增加盈利是最具综合能力的目标。作为投资人,主要关注的是企业投资的回报率。而对于一般投资者而言,关心的是企业股息、红利的发放问题,对于拥有企业控制权的投资者,则会更多地考虑如何增强企业竞争力,扩大市场占有率,追求长期利益的持续、稳定增长。这就需要对企业进行盈利分析。本文献综述主要归纳有关论述企业的盈利状况和盈利能力分析的文献资料。 关键词:财务报表分析、盈利能力、 一、盈利能力分析的涵义综述 南开大学出版社,崔也光在2005年的《财务报表分析》中对盈利能力分析的。内涵有阐述。他说,盈利能力是指企业利用各种资源赚取利润的能力,它是企业营销能力、获取现金能力、降低本钱能力及规避风险能力等的综合体现,也是企业各环节经营结果的具体表现,企业经营的好坏都会通过盈利能力表现出来。 陈红权在《企业偿债与盈利能力的分析评价》说:“盈利能力,也称为获利能力,它是指企业获得利润的能力。盈利能力的分析应包括盈利水平及盈利的稳定、持久性两方面内容。企业盈利能力分析中,人们往往重视企业获得利润的多少,而忽视企业盈利的稳定性、持久性的分析。实际上,企业盈利能力的强弱不能仅以企业利润总额的高低水平来衡量。虽然利润总额可以揭示企业当期的盈利总规模或总水平,但是它不能表明这一利润总额是怎样形成的,也不能反映企业的盈利能否按照现在的水平维持或按照一定的速度增长下去,即无法揭示这一盈利的内在品质。所以,对盈利能力的分析不仅要进行总量的分析,还要在此基础上进行盈利结构的分析,把握企业盈利的稳定性和持久性。 黄明、郭大伟在《浅谈企业盈利能力的分析》说,盈利能力通常是指企业在一定时期内赚取利润的能力。盈利能力的大小是—个相对的概念,即利润相对于一定的资源投入、一定的收入而言。利润率越高,盈利能力越强;利润率越低,盈利能力越差。企业经营业绩的好坏最终可通过企业的盈利能力来反映。无论是企业的经理人员、债权人,还是股东(投资人)都非常关心企业的盈利能力,并重视对利润率及其变动趋势的分析与预测。 二、有关盈利能力分析对象的综述 (一)洪国赐、卢联生著《财务报表分析》中对盈利分析对象有全面的阐述:1.毛利率是销售毛利与销售收入的比率,它反映企业经营的获利能力。

VB 钩子详解

Windows钩子函数的概念和实现方法 首先我们必须大致了解Windows的基本运作机理,Windows作为一个多任务操作系统,它是分有层次概念的,运行在最底下的称为Ring 0层,在这一层里基本上都是一些硬件驱动程序和Windows的总内核,一般的应用程序极少极少运行在这层,当然也有例外,例如调试软件SoftICE(不过基本上这个软件的作用是Crack软件而不是调试)、还原精灵还有分区魔法大师,就是运行在Ring 0层的,另外就是著名的CIH病毒。运行在Ring 0级的程序能够对所有硬件进行直接地址级访问,所受到的限制也最小。 消息(Message)传递是Windows独有的一种机制,因为Windows规定运行在Ring 0以上的程序是没有权利知道究竟硬件发生了怎样的中断变化的,Windows统一将这些中断变化封装成一系列的消息(黑箱作业,也就是常说的Black Box),比如鼠标移动,系统产生一个OnMouseMove消息(但这条消息从何而来,相关的硬件中断向量是什么,程序无从得知),OnMouseMove这条消息最后送达每一个窗口程序以供处理。在更高层次的地方,比如说控件级,所有的消息还被封装成一系列“事件”,比如TextBox控件有KeyPress事件,实际上,这些事件都是林林种种的消息映射。事件的概念使得程序员能够更加傻瓜化地进行编程,但是从另一个角度来说,这种黑箱作业也使得程序员过分依赖系统的安排,限制了程序员的思维,举个例子,Windows为按钮控件封装了大部分常用的属性和事件,完成一般的常规妈作是没有问题的,但是很遗憾,或许是Windows的疏忽,按钮控件的字体颜色永远默认是黑色,而且Windows没有为此提供一个专门的接口来修改,碰到这种情况,程序员就会非常头疼。 钩子函数(Hook Function),就像一把钩子,它的作用是将消息在抵达窗口程序之前先钩到一个地方以便程序员进行分析,这个地方称为挂接函数链,消息在这里先被一系列的函数处理然后由程序员决定是否交还给Windows系统,在这里,你可以“吞噬”(Lickup)一些你不希望发生的消息,比如说你吞掉所有的键盘消息而不交还给系统,那么键盘将会失灵。当然,经过了这道周折,系统效率将会有极其微小的降低,但是,由于Windows规定所有不运行在Ring 0层的程序都不能直接访问硬件中断,因此作为一种中断驱动程序的补充,钩子函数在很多场合下是非常有用的,有时候甚至是唯一的方法。 下面就以键盘拦截为例讲述钩子函数的使用方法: 首先定义以下API: Public Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long SetWindowsHookEx,这个函数是一切钩子函数的根本,其作用是通知Windows进行钩子妈作并定义钩子函数。 参数1,idHook为定义需要进行的拦截类型,是键盘拦截?鼠标拦截?还是别的。如 WH_KEYBOARD捕捉键盘消息,而WH_MOUSE捕捉鼠标消息。

浅谈电子商务网站站内搜索引擎

1什么是站内搜索引擎 站内搜索是指对网站内部信息的精确检索和资源挖掘,它为用户提供全面、准确、快速的站内信息检索服务,是网站的核心竞争力之一。通俗地说,站内搜索引擎就是一个提供给网站用户的软件,方便他们搜索网站中的信息从而得到想要的内容。 2站内搜索引擎在电子商务网站中的重要地位 2.1站内搜索效果的好坏直接决定着网站商品的销量 对于电子商务网站,网站的每一条信息都具有商业价值,而有限的页面是不可能反映所有信息的价值的。站内搜索因此而成为电子商务网站发展的关键,是网站的核心服务之一。站内搜索效果的好坏可以直接决定网站商品的销量。2008年6月24日,中国互联网络信息中心(CNNIC)发布了《2008年中国网络购物调查研究报告》[1]。报告中的调查数据显示(如图1),站内搜索对用户最重要,影响也最大,有43.8%的用户习惯通过站内搜索浏览商品。 图1 如果消费者无法搜索到他们想要的商 品,那么他们就会转移到其他网站。因此,拥 有高质量的站内搜索引擎对于在线销售收入 是至关重要的。 2.2站内搜索引擎是研究网站用户行为 的一个有效工具 站内搜索引擎同时也是研究网站用户行 为的一个有效工具。通过对网站用户搜索行 为的分析,了解他们浏览商品的习惯对于网 站有针对性地改进网页布局,进一步制定更 为有效的网络营销策略以及改善网站服务质 量都具有重要价值。 3站内搜索发展过程中存在的问题 随着使用互联网进行电子商务的普及程 度的不断提高,搜索引擎已成为人们上网购 买商品不可缺少的工具。用户对站内搜索引 擎的精确度、速度和便利友好程度等的要求 也越来越高。一个好的站内搜索应该尽量满 足准确、高速、方便和搜索智能化这些方面的 要求。而目前大部分站内搜索引擎,还存在种 种的问题缺憾,需要进一步结合相关先进技 术发展完善。 3.1用户输入与结果不相符 很多网站通过关键字匹配查询数据库来 实现搜索,关键字所对应的数据库字段非常 有限。但由于文化水平的差异,并不是所有的 用户都能输入合适的关键词来进行搜索。他 们往往输入的是一些简单的短语,甚至是一 句话。关键词错误匹配的情况很多,用户看到 的常常是“没有您所需要的搜索结果”或者很 多无关结果。例如:输入“礼品行”进行搜索, 可能会出现“礼品行业”、“礼品行李”、“礼品 行云流水”等大量无关结果。不理想的原因之 一是分词不准确。要提高站内搜索的水平,就 得对用户的输入进行进一步处理,加入分词 技术和智能搜索技术,才能使用户随心所欲 地输入,从而提供网站的友好程度。 3.2搜索速度缓慢 很多网站让用户的搜索操作直接与数据 库查询挂钩,这样使网站数据库的负荷很大。 当数据库记录量比较大的时候,频繁地查询 数据库,查询速度会很慢,进而影响网站的正 常运转。尤其是同时有很多用户进行操作的 时候,会导致信息塞车,这样用户经过一段时 间等待仍然看不到结果,很快就会转移到其 他网站选购商品。如何不让用户不耐烦是一 个至关重要的问题,加入索引技术是解决这 一问题的很重要的手段。 3.3关键词中的同音字和错别字得不到 自动更正 在网站的站内搜索中输入“挪积压”进行 搜索,如果得到的是与“诺基亚”相关的结果, 并且提示你是不是要找“诺基亚”。这说明网 站提供了搜索关键词的相关词的自动匹配, 帮助用户在搜索的时候进行参考。因为已经 预先估计到用户可能误拼这个词,因而避免 了搜索不到任何结果的糟糕结局。但目前只 有极少数的电子商务网站实现了这一智能化 检索功能,大部分网站上输入这样的关键词, 会返回“0”个结果,除非更正拼写,才会有所 收获。这也是决定网站用户多少的一个因素。 3.4无法提供主题搜索和热门统计功能 如果搜索引擎根据用户的搜索要求,按 照一个主题把与之相关的信息提供给用户, 就可以让用户更加全面地了解他所想要的商 品。这就需要优化电子商务网站信息之间的 内部组织结构,从而方便用户的使用。另外, 如果搜索引擎具备统计功能,可以统计一段 时间内关键字的访问频度,列出热门关键字。 就可以让用户知道热门商品,网站也能更好 浅谈电子商务网站站内搜索引擎 赵园丁(山西大学商务学院电子商务系,山西太原030031)摘要:对于电子商务网站,站内搜索结果的好坏直接决定着网站商品的销量。拥有 高质量的站内搜索引擎对于在线销售收入是至关重要的。用户对站内搜索的要求越来越 高,好的站内搜索引擎应该尽量满足准确、高速、方便和搜索智能化这些方面的要求。 关键词:电子商务;站内搜索; 用户需求 (转下页) 29 Thesis学术交流

消息钩子函数入门篇.docx

消息钩子函数入门篇 Windows系统是建立在事件驱动的机制上的,说穿了就 是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词, 日志监视等等。可见,利用钩子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。 钩子的类型 一.按事件分类,有如下的几种常用类型 (1)键盘钩子和低级键盘钩子可以监视各种键盘消 /息、O (2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。 (3)外壳钩子可以监视各种Shell事件消息。比如启动和关闭应用程序。 (4)日志钩子可以记录从系统消息队列中取出的各种 事件消息。 (5)窗口过程钩子监视所有从系统消息队列发往目标窗口的

消息。 此外,还有一些特定事件的钩子提供给我们使用,不列举。 下面描述常用的Hook类型: 1、WH_CA LLWNDPROC 和WH_CALLWND PROCRETHoo ks WH_CAL LWNDPROC 和W H_CALLWNDP ROCRETHook s 使你可以监视发送到窗口过程的消息。系统在消息发送到接收窗口过程之前调用WH_C ALLWNDPROC Hook子程,并且在窗口过程处理完消息之后调用WH_CALL WNDPR0 CR ETHook 子程。W H_CALLWNDP ROCRETHook 传递指针到CWPRE TSTRUCT 结构,再传递到Hook 子程。CWPRETSTR UCT 结构包含了来自处理消息的窗口过程的返回值,同样也包括了与这个消息关联的消息参数。 2、WH_CB THook 在以下事件之前,系统都会调用WH_CBTHoo k子程,这些事件包括: 1.激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件; 2.完成系统指令; 3.来自系统消息队列中的移动鼠标,键盘事件; 4.设置输入焦点事件; 5 ?同步系统消息队列事件。

鼠标键盘钩子截获密码

利用鼠标键盘钩子截获密码。 源码示例:https://www.doczj.com/doc/c113989178.html,/soft/GetPass_Src.rar 钩子能截获系统并得理发送给其它应用程序的消息,能完成一般程序无法完成的功能。掌握钩子的编程方法是很有必要的 钩子分类: 1、WH_CALLWNDPROC和WH_CALLWNDPROCRET:使你可以监视发送到窗口过程的消息 3、WH_DEBUG 调试钩子 4、WH_FOREGROUNDIDLE 当当应用程序的前台线程大概要变成空闲状态时,系统就会调用 WH_FOREGROUNDIDL 5、WH_JOURNALRECORD 监视和记录输入事件 6、WH_JOURNALPLAYBACK 回放用WH_JOURNALRECORD记录事件 7、WH_KEYBOARD 键盘钩子 9、WH_KEYBOARD_LL 低层键盘钩子 10、WH_MOUSE 鼠标钩子 11、WH_MOUSE_LL 底层鼠标钩子 12、WH_SHELL 外壳钩子 13、WH_MSGFILTER 和WH_SYSMSGFILTER 使我们可以监视菜单,滚动条,消息框等 安装钩子: 调用函数SetWindowsHookEx安装钩子。其函数原型为: HHOOK SetWindowsHookEx( int idHook,HOOKPROC lpfn, INSTANCE hMod,DWORD dwThreadId ) idHook表示钩子类型,它是和钩子函数类型一一对应的。如,

WH_KEYBOARD,WH_MOUSE。 Lpfn是钩子函数的地址。 HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该参数为钩子函数所在的DLL句柄。(系统钩子必须在DLL中) dwThreadId 指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。 SetWindowsHookEx返回所安装的钩子句柄。 卸载钩子 调用函数BOOL UnhookWindowsHookEx( HHOOK hhk)卸载钩子 定义钩子函数 钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。一般为下: LRESULT WINAPI MyHookProc(int nCode ,WPARAM wParam,LPARAM lParam) 参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。nCode 包含有关消息本身的信,比如是否从消息队列中移出。 实例: 下面我们通过安装鼠标钩子。和键盘钩子还截获输入的密码,并可查看*密码为例,来说明何何使用钩子。 1,进入向导,新建MFC AppWizard(dll) 取名为GetPass,选择MFC Extension DLL,完成。 2,新建一个CGetPassHook 类,基类:CObject,并加入StartHook,StopHook,函数,如下:class AFX_EXT_CLASS CGetPassHook : public CObject { public: BOOL StopHook();

hook的使用实例

在网上找了好久都没有找到消息hook的实例,下面是我的例子给大家分享一下 下面是dll中的代码: //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //我的经验,编译的时候会提示DllMain,已在DllMain.cpp中定义,把DllMain.cpp从源文件里删掉就好了 #include "stdafx.h" #include HHOOK hkey=NULL; HINSTANCE h_dll; #pragma data_seg(".MySec") //定义字段,段名.MySec HWND h_wnd=NULL; #pragma data_seg() #pragma comment(linker,"/section:.MySec,RWS") BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { h_dll=hinstDLL; // MessageBox(0,"运行dllman","",MB_OK); return TRUE; } LRESULT CALLBACK my_test(int nCode,WPARAM wParam,LPARAM iParam)// { /* if(nCode==HC_ACTION) { MessageBox(0,"成功!!","标题",MB_OK); } else { MessageBox(0,"失败!!","标题",MB_OK); } */ MessageBox(0,"被截取","",MB_OK); UnhookWindowsHookEx(hkey); return 1; } void SetHook(HWND hwnd) { h_wnd = hwnd; // MessageBox(0,"运行sethook","",MB_OK); hkey=SetWindowsHookEx(WH_KEYBOARD,my_test,h_dll,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 下面是EXE的代码:有很多头文件是没用上的,我个人习惯都带着- -,虽然这不是好习惯

搜索引擎分类及工作原理

搜索引擎的分类及工作原理 姓名:XXX班级:XXX 摘要:这篇论文是关于搜索引擎的分类及原理的分析。在浩瀚的网络资源中,搜索引擎(SearchEngine)是一种网上信息检索工具,它能帮助用户迅速而全面地找到所需要的信息。它是一个集中了千千万万个站点的地方,主要功能是给人们搜索这些站点。它还会分门别类的把一些好的站点列出来,以方便人们查找资料,有了搜索引擎你就能很容易的找到你想要的内容或站点, 关键词: 1.前言 2. )、目录 2.1全文搜索引擎 全文搜索引擎是从网站提取信息建立网页数据库。搜索引擎的自动信息搜集功能分两种。一种是定期搜索,即每隔一段时间搜索引擎主动派出“蜘蛛”程序,对一定IP地址范围内的互联网站进行检索,一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库。

另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,它在一定时间内(2天到数月不等)定向向你的网站派出“蜘蛛”程序,扫描你的网站并将有关信息存入数据库,以备用户查询。由于近年来搜索引擎索引规则发生了很大变化,主动提交网址 并不保证你的网站能进入搜索引擎数据库,因此目前最好的办法是多获得一些外部链接,让搜索引擎有更多机会找到你并自动将你的网站收录。 当用户以关键词查找信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相符的网站,便采用特殊的算法——通常根据网页中关键词的匹配程度,出现的位置/频次,链接质量等——计算出各网页的相关度及排名等级,然后根据关联度高低,按 2.2 2.3 搜索引擎。在搜索结果排列方面,有的直接按来源引擎排列搜索结果,如Dogpile,有的则按自定的规则将结果重新排列组合,如Vivisimo 3搜索引擎的原理 全文搜索引擎的“网络机器人”或“网络蜘蛛”是一种网络上的软件,它遍历Web空间,能够扫描一定IP地址范围内的网站,并沿着网络上的链接从一个网页到另一个网页,从一个网站到另一个网站采集网页资料。它为保证采集的资料最新,还会回访已抓取过的网页。网络机

第4章钩子函数和窗口子类化

第4章钩子函数和窗口子类化 钩子是操作系统消息处理的一种机制。通过钩子,应用程序可以安装一个钩子回调过程让系统调用,从而监视系统中的消息队列,在这些消息到达目标窗口之前对这些消息进行处理。 本章主要介绍钩子函数的基本概念以及几种常用钩子的应用举例。 4.1 钩子函数 早在Windows3.x的时候,就有了钩子函数,它经历了Windows9x/NT/2000/XP/2003各个操作系统,始终保持了最大的兼容性。可以说大部分的钩子函数适用于现在所有的Win32操作系统,钩子函数在系统编程方面有着广泛的应用前景。 首先应该承认钩子会降低系统的性能,因为它增加系统处理每一个消息的开销,所以用户除非必要才安装钩子,而且还要尽可能早地去除钩子。 操作系统支持多种类型的钩子,每种类型都提供了它特有的消息处理机制,比如应用程序使用WH_MOUSE钩子只能监视鼠标的消息队列。对于每种类型的钩子,系统都维护一个各自独立的钩子链,钩子链是一个指向用户提供的回调函数钩子过程的链表指针。当与特定类型的钩子相关的窗口消息发生时,系统会把消息依次传递给钩子链中的每一个回调过程,传递的过程由用户定义的回调过程实现。一般情况下,用户提供的钩子回调过程必须调用钩子链中的下一个回调过程。否则钩子处理可能会中断,出现不可预测的结果。钩子过程可以监视窗口消息,也可以修改甚至停止钩子消息的继续传递,不让它到达钩子链中的下一个目标过程。 钩子过程需要用户调用SetWindowsHookEx函数进行安装。钩子过程一般遵循下面的调用规范。 LRESULT CALLBACK HookProc(intnCode,WPARAMwParam,LPARAMlParam);其中HookProc是应用程序提供的函数名。nCode参数是一个钩子标识码,钩子过程会利用它决定下一步进行的操作。这个标识码的值与安装的钩子类型有关。每种类型都有它的自身定义。后面两个参数的定义依赖于nCode参数,一般用于存放与窗口消息相关的内容。SetWindowsHookEx函数会自动安装一个钩子过程,这个过程位于钩子链表的头部,最后安装的钩子函数总是最先得到响应。前面的钩子处理过程可以决定是否调用钩子链中的下一个过程,这可以通过调用CallNextHookEx函数实现。 注意:某些钩子类型能够监视发生的窗口消息系统自动把消息依次传递给钩子链中的每一个钩子过程,而不管用户是否调用CallNextHookEx函数。 全局钩子会监视同一桌面环境下所有的窗口消息,而线程钩子只能监视单个线程内发生的消息。由于全局钩子能够在同一桌面的所有应用环境下调用,所有这个钩子过程必须在一个动态链接库中实现。 注意:全局钩子一般只用于调试目的,应尽可能地避免使用。全局钩子会显著地降低系统的性能,增加系统的开销,并可能会与安装同一全局钩子的应用程序发生冲突。钩子函数的处理应该尽可能简单,并要快速退出。对于处理复杂的过程,可以借助于发送异步处理窗口消息的方式实现。 操作系统提供了以下一些钩子,这些钩子允许用户监视系统消息处理的某一个方面。如表4-1所示: 安装钩子函数要用到SetWindowsHookEx函数。对于全局钩子而言,钩子过程必须在一个动态链接库模块中实现,这个过程必须作为动态链接库的输出函数,以便能够在安装钩子程序中通过调用LoadLibrary/GetProcAddress函数获得回调过程的地址,然后把回调函数的地址传递给SetWindowsHookEx函数。 HOOK PROC hkprcSys Msg; Static HINSTANCE hinstDLL; Static HHOOK hhookSysMsg; hinstDLL=LoadLibrary((LPCTSTR)"c:\\windows\\sysmsg.dll");

上市公司盈利能力分析

上市公司盈利能力分析 班级:财务1104 姓名:刘思达 学号:1110620404 指导教师:强殿英

摘要: 企业盈利能力是衡量评价上市企业前景的重要组成部分和具体体现,企业获取利润的能力是衡量上市公司业绩的基本指标。因子分析是指研究从变量群中提取共性因子的统计技术,可在许多变量中找出隐藏的具有代表性的因子。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。本文利用SPSS软件对三十家房地产企业进行因子分析,得出相关结果,期望为决策者提供科学的决策依据,进一步提高公司的业绩,为我国房地产上市公司及其他人士提高经济效益和企业价值提供参考。 关键词:因子分析,上市公司,盈利能力 一.引言 随着人民的物质和生活水平在不断地提高,房地产已经成为我国经济发展的引擎和国民经济的重要支柱行业。人民对住房的需求不断的攀升,促进了房地产行业的崛起。中国的房地产业得到了快速发展。房地产业在整个国民经济体系中具有重要的地位和作用,对房地产企业的盈利能力评价意义重大。对于上市公司来说,盈利能力是企业利用资产创造收益的能力,反映企业的管理水平和经营业绩,是企业发展的动力。盈利能力评价企业在生产经营中的创利水平,它为企业提供生产经营的效果和利润以及为投资者提供资本收益等,反映企业的综合素质。 作为财务分析的工具,财务比率是指反映会计报表内在联系的比较分析指标,对上市公司盈利能力采用比率分析。因为财务比率能够揭示会计报表所提供的财务数据不能直接反映的相互关系,并据此对上市公司历史的盈利能力及其未来变动趋势做出判断。因此,以财务比率对公司的盈利能力进行分析是财务分析最富创意的内容。本文因子分析的变量均是相应的财务比率,选取了在深圳、上海上市的三十家房地产企业的财务报表数据,进行盈利能力分析与评价。 二.房地产上市企业盈利能力分析的指标选择 本文参考对盈利能力评价的大量研究结果,选取了以下的指标体系。通过对每股收益、每股净资产、净资产收益率、总资产报酬率、资产净利率、销售净利率、销售毛利率七个指标来反映企业的盈利能力。

十种你不知道的搜索引擎大公开

十种你不知道的搜索引擎大公开 google 博客声称退出中国,百度股票大涨,如果https://www.doczj.com/doc/c113989178.html,关闭,对谁最有利?百度?必应?还是搜搜?无论怎么说,你我的生活已经离不开搜索引擎,下面向大家介绍下也许你不知道的有趣的搜索引擎。 淘宝返利搜索-趣购 网址:https://www.doczj.com/doc/c113989178.html,/ 趣购返利是目前最专业最好用的淘宝返利搜索引擎,为广大用户提供方便快捷的购物返利体验,让您享受淘宝购物乐趣。趣购淘宝返利。能够提供35万家淘宝店铺,超过876万件淘宝商品的额外返利。在参加商家活动的同时,还能享受最高达35%的额外返利。你可以非常方便的通过搜索您在淘宝看中的产品,或者您希望进行购买的淘宝店铺,查看趣购返利网能够提供的额外的淘宝返利金额。通过简单的email 注册,您就可以从让来米网保存您的返利金额。只要有了支付宝,就可以快捷的从趣购淘宝返利获得返利的金额。 一切都是那么简单,享受积少成多的乐趣,就在趣购返利。 书签式搜索引擎——todo 网址:https://www.doczj.com/doc/c113989178.html,/

PC home推出的为入门者设计的 todo 搜索引擎 (https://www.doczj.com/doc/c113989178.html,),正式进入为网友提供资讯搜索的服务。过去,PC home 的在线公司 PC home online 四个网站(电脑报、采购情报、投资情报、台北新闻)所做的是制作内容的工作,而 todo 的工作是信息搜索服务,为读者搜集资料、找资料。制作内容、资料搜索这二者都是信息服务,但做法上却有所不同,我们甚至可以说进入了一个全新的领域,我们用过去对于信息服务的了解来探索这个新领域。 不要花太多脑筋,也不用去记难背的网址,只要用鼠标点来点去就好,我们希望 todo 能成为网友上网的起始点(start point),由这里可以很方便地到其他各站去。我们精心找出来的好站 bookmark,包括 todo 入门好站、PC home100 好站、英文 100 好站,同时也包括中文雅虎、蕃薯藤的推荐好站。这个搜集各家精选好站的 bookmark,会是网友的上网 bookmark,你在这里只要点两下,就可以到达你要的网站;如果这些bookmark 无法满足你,再用目录服务搜索或网页搜索,这些 todo 也有提供,但我们认为这些已变成基础的东西,不应该变成跟读者接触的介面,不应该把搜索的问题丢给网友,让网友耗费精力去找网站。 人际交流的桥梁——WhoWhere 网址:https://www.doczj.com/doc/c113989178.html,/

综合课程设计报告--键盘输入截获系统的设计与实现

综合课程设计报告--键盘输入截获系统的设计与实现

键盘输入截获系统的设计与实现 摘要 Windows系统键盘截获系统,在我们的生活中是很常见的,比如在军方的某些系统中,为确保某些机密信息不被泄露出去,就要求在工作人员在于外界交流的时候,无意中输出的可能隐含机密信息不被发送出去,此时可以设置关键字,使用钩子来屏蔽这些信息,不让其发送出去,这样就很好的杜绝了机密信息的泄露的发生,提高军方系统的安全性,以上是一个很常见的例子,那么当提及到Windows系统信息截获,不得不想到动态链接库和钩子,动态链接库在Windows 系统中无处不在,编程过程中,调用的所有的API都是从系统动态链接库导出的,实际上,不使用动态链接库几乎是不可能的,因为Windows 提供给编程人员的几乎所有功能都驻留在动态链接库中。 Windows 应用程序的运行模块是基于消息驱动的,任何线程只要注册了窗口类都会有一个消息队列来接收用户的输入消息和系统消息。为了取得特定线程接收或者发送的消息,就要用到Windows提供的钩子。Windows钩子广泛应用

于各种检测侦查程序中,如输入监视、API截获等。一般的钩子函数都必须写在动态链接库中,以便注入到其进程。 一、需求分析 1、实验要求: 设计一个基于Windows或Linux的键盘输入捕获系统,对特定键盘输入进行检测过滤。要求如下: (1)设计一个键盘钩子程序捕获键盘动作,捕获任意窗口上的键盘输入,并进行记录; (2)能监控QQ、MSN、word、Excel、记事本、IE网页等应用程序; (3)设置一些关键词,根据键盘输入,设计一种关键词检测的方法,能在记录的键盘输入中检测出关键词出现的位置; (4)对输入的关键词,进行过滤,阻止其在相关的应用程序中输出; 2、实验环境: Microsoft Visual studio 2010 二、实验分组情况: 三、实验原理概述: 钩子:钩子是Windows中可以拦截事件的一种机制,可以指定一个函数作为特定类型的 被拦截事件的钩子过程。钩子过程可以对 拦截的每个事件进行处理。不同类型的钩 子可以为消息处理机制的不同方面提供 访问,例如,WH_MOUSE钩子可以监视与 鼠标操作相关的消息。系统为每一个类型 的钩子维护一个独立的钩子链,其中包含 指定一组作为钩子过程的回调函数指针。 当与指定类型的钩子相关联的消息发生

相关主题
文本预览
相关文档 最新文档