如何用 contains 过滤器来实现精确没有图层匹配此过滤器

Filter 过滤器
原文链接:
  Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
  它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。
  Filter功能:
在HttpServletRequest 到达 Servlet 之前,拦截客户的 HttpServletRequest 。&根据需要检查 HttpServletRequest ,也可以修改HttpServletRequest 头和数据。
在HttpServletResponse 到达客户端之前,拦截HttpServletResponse 。&根据需要检查 HttpServletResponse ,也可以修改HttpServletResponse头和数据。
2、如何实现拦截
  Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到如下目的:
调用目标资源之前,让一段代码执行。
是否调用目标资源(即是否让用户访问web资源)。
  web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。&
3、Filter开发两步走
编写java类实现Filter接口,并实现其doFilter方法。&
在 web.xml 文件中使用&filter&和&filter-mapping&元素对编写的filter类进行注册,并设置它所能拦截的资源。
  web.xml配置各节点介绍:
&filter-name&用于为过滤器指定一个名字,该元素的内容不能为空。
&filter-class&元素用于指定过滤器的完整的限定类名。
&init-param&元素用于为过滤器指定初始化参数,它的子元素&param-name&指定参数的名字,&param-value&指定参数的值。
在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
&filter-mapping&元素用于设置一个 Filter 所负责拦截的资源。一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
&filter-name&子元素用于设置filter的注册名称。该值必须是在&filter&元素中声明过的过滤器的名字
&url-pattern&设置 filter 所拦截的请求路径(过滤器关联的URL样式)
&servlet-name&指定过滤器所拦截的Servlet名称。
&dispatcher&指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个&dispatcher& 子元素用来指定 Filter 对资源的多种调用方式进行拦截。
&dispatcher& 子元素可以设置的值及其意义:
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
4、Filter链
  在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。
  web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第2个filter,如果没有,则调用目标资源。
5、Filter的生命周期
public void init(FilterConfig filterConfig) throws ServletE//初始化
  和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletE//拦截请求
  这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
public void destroy();//销毁
  Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
6、FilterConfig接口
  用户在配置filter时,可以使用&init-param&为filter配置一些初始化参数,当web容器实例化Filter对象,调用其init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。因此开发人员在编写filter时,通过filterConfig对象的方法,就可获得以下内容:
String getFilterName();//得到filter的名称。
String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。
public ServletContext getServletContext();//返回Servlet上下文对象的引用。
7、Filter使用案例
  1、使用Filter验证用户登录安全控制
  前段时间参与维护一个项目,用户退出系统后,再去地址栏访问历史,根据url,仍然能够进入系统响应页面。我去检查一下发现对请求未进行过滤验证用户登录。添加一个filter搞定问题!
  先在web.xml配置
&filter-name&SessionFilter&/filter-name&
&filter-class&com.action.login.SessionFilter&/filter-class&
&init-param&
&param-name&logonStrings&/param-name&&!-- 对登录页面不进行过滤 --&
&param-value&/project/index.login.do&/param-value&
&/init-param&
&init-param&
&param-name&includeStrings&/param-name&&!-- 只对指定过滤参数后缀进行过滤 --&
&param-value&..jsp&/param-value&
&/init-param&
&init-param&
&param-name&redirectPath&/param-name&&!-- 未通过跳转到登录界面 --&
&param-value&/index.jsp&/param-value&
&/init-param&
&init-param&
&param-name&disabletestfilter&/param-name&&!-- Y:过滤无效 --&
&param-value&N&/param-value&
&/init-param&
&filter-mapping&
&filter-name&SessionFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
  接着编写FilterServlet:
package com.action.
import java.io.IOE
import javax.servlet.F
import javax.servlet.FilterC
import javax.servlet.FilterC
import javax.servlet.ServletE
import javax.servlet.ServletR
import javax.servlet.ServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletResponseW
判断用户是否登录,未登录则退出系统
public class SessionFilter implements Filter {
public FilterC
public void destroy() {
this.config = null;
public static boolean isContains(String container, String[] regx) {
boolean result = false;
for (int i = 0; i & regx. i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings");
// 登录登陆页面
String includeStrings = config.getInitParameter("includeStrings");
// 过滤资源后缀参数
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 没有登陆转向页面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 过滤器是否有效
if (disabletestfilter.toUpperCase().equals("Y")) {
// 过滤无效
chain.doFilter(request, response);
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");
if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 只对指定过滤参数后缀进行过滤
chain.doFilter(request, response);
if (this.isContains(hrequest.getRequestURI(), logonList)) {// 对登录页面不进行过滤
chain.doFilter(request, response);
String user = ( String ) hrequest.getSession().getAttribute("useronly");//判断用户是否登录
if (user == null) {
wrapper.sendRedirect(redirectPath);
chain.doFilter(request, response);
public void init(FilterConfig filterConfig) throws ServletException {
config = filterC
  这样既可完成对用户所有请求,均要经过这个Filter进行验证用户登录。
  2、防止中文乱码过滤器
  项目使用spring框架时。当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题,那就可以使用这个过滤器。
&filter-name&encoding&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&&!--用来指定一个具体的字符集--&
&param-value&UTF-8&/param-value&
&/init-param&
&init-param&
&param-name&forceEncoding&/param-name&&!--true:无论request是否指定了字符集,都是用encoding;false:如果request已指定一个字符集,则不使用encoding--&
&param-value&false&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encoding&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
  3、Spring+Hibernate的OpenSessionInViewFilter控制session的开关
  当hibernate+spring配合使用的时候,如果设置了lazy=true(延迟加载),那么在读取数据的时候,当读取了父数据后,hibernate 会自动关闭session,这样,当要使用与之关联数据、子数据的时候,系统会抛出lazyinit的错误,这时就需要使用spring提供的OpenSessionInViewFilter过滤器。
  OpenSessionInViewFilter主要是保持Session状态直到request将全部页面发送到客户端,直到请求结束后才关闭session,这样就可以解决延迟加载带来的问题。
  注意:OpenSessionInViewFilter配置要写在struts2的配置前面。因为tomcat容器在加载过滤器的时候是按照顺序加载的,如果配置文件先写的是struts2的过滤器配置,然后才是OpenSessionInViewFilter过滤器配置,所以加载的顺序导致,action在获得数据的时候session并没有被spring管理。
&!-- lazy loading enabled in spring --&
&filter-name&OpenSessionInViewFilter&/filter-name&
&filter-class&org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&/filter-class&
&init-param&
&param-name&sessionFactoryBeanName&/param-name&&!-- 可缺省。默认是从spring容器中找id为sessionFactory的bean,如果id不为sessionFactory,则需要配置如下,此处SessionFactory为spring容器中的bean。 --&
&param-value&sessionFactory&/param-value&
&/init-param&
&init-param&
&param-name&singleSession&/param-name&&!-- singleSession默认为true,若设为false则等于没用OpenSessionInView --&
&param-value&true&/param-value&
&/init-param&
&filter-mapping&
&filter-name&OpenSessionInViewFilter&/filter-name&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
  4、Struts2的web.xml配置
  项目中使用Struts2同样需要在web.xml配置过滤器,用来截取请求,转到Struts2的Action进行处理。
  注意:如果在2.1.3以前的Struts2版本,过滤器使用org.apache.struts2.dispatcher.FilterDispatcher。否则使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter。从Struts2.1.3开始,将废弃ActionContextCleanUp过滤器,而在StrutsPrepareAndExecuteFilter过滤器中包含相应的功能。
  三个初始化参数配置:
config参数:指定要加载的配置文件。逗号分割。
actionPackages参数:指定Action类所在的包空间。逗号分割。
configProviders参数:自定义配置文件提供者,需要实现ConfigurationProvider接口类。逗号分割。
&!-- struts 2.x filter --&
&filter-name&struts2&/filter-name&
&filter-class&org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&/filter-class&
&filter-mapping&
&filter-name&struts2&/filter-name&
&url-pattern&*.do&/url-pattern&
&/filter-mapping&
&原文链接:
阅读(...) 评论()为什么java String.contains 没有使用类似KMP字符串匹配算法进行优化?
阅读JDK源码无意间发现String的contains函数进行字串匹配的时候使用的是简单的O(n*m)(源字符串长度n,要匹配字串长度m)复杂度的算法,为什么不使用KMP这种Θ(n)复杂度的算法呢?
这要找到最正确的答案恐怕得去问问Java的元老们才行?任何其他人的“分析”都只能是猜测。毕竟这块代码(String.indexOf(String))的实现从Sun JDK 1.0.2开始到现在的Oracle JDK8u一直都没怎么变过;只有少量细节变了点,算法思路完全没变。从以下两个OpenJDK邮件列表的讨论串看,最大的可能是“还没优化到这里”和“常用场景下这个实现已经很快,外加这个实现不需要额外空间开销”。结论是:欢迎提交改进的patch;“你行你上”系列。注意:新的“优化”实现必须要在“常用场景”上能比当前实现有显著性能提升,而且额外空间开销不会很大,才有可能被接受。KMP在“常用场景”上未必能做到这点:初始化的时间开销、额外的空间开销都会成为绊脚石。所谓“常用场景”,Java里大多数String的长度其实并不长。有兴趣的话可以跑一个您的应用场景里的典型应用统计一下长度。另外题主肯定没有关注的是,虽然OpenJDK的String.indexOf()的源码写成那样,在许多JVM里这个方法都有内部的特定优化——JVM直接无视原本Java版的实现,而在内部重新实现一遍。Oracle JDK / OpenJDK的HotSpot VM就会做这样的优化,例如在有SSE4.2指令的x86上会用SSE4.2的STTNI系指令pcmpestri来实现String.indexOf()。我在这里放过一个笔记:我相信IBM J9 VM的Testarossa JIT编译器也有类似的优化。这样任凭别人怎么修改Java版的实现,等到被JIT编译之后都无所谓了?所以如果题主有兴趣提交patch给OpenJDK去改进String.indexOf()的性能,请记住要用参数-XX:DisableIntrinsic=_indexOf
来测试。不然无论您怎么改Java代码最后跑的搞不好都是一样的东西。
最简单的匹配算法只有在最差情况下才是 O(mn) 的复杂度。一种这样的情况是被匹配字符串包含 n 个相同的字符 A,而模式字符串是 m-1 个 A 加一个不同的字符 B,这样每个位置都需要 m 次比较才失败。还可以构造其他一些类似的例子,但是这些情况对于大多数场景都是很少出现的。所以,当前的算法在实际中基本上是 O(n+m) 的时间复杂度,O(1) 的空间复杂的,这作为 builtin 的实现是很合理的。特别的,当 m 个字符都不相同的时候,最差情况也是 O(n+m) 的。当特殊的场景出现的时候,再单独使用其他匹配算法。
私以为这样的设计是合理的,问题规模很小时brute force已经足够好,问题规模比较大时你应该用正则表达式啊!说到底KMP根本就是正则表达式的最简单情况而已,一样是要编译成自动机的。
KMP的O(n)在实际应用并不那么理想,平均性能大都比不上Boyer-Moore 或 简化的 horspool算法,facebook 的folly库就采用Boyer-Moore算法,不过与KMP类似的Aho-Corasick在压缩空间后还是很可观的。Snort初期采用的是Aho-Corasick,但现在好像改用wu-manber了,太久没关注了。若想深入了解,可以去查阅这本书&& 柔性字符串匹配 &&
正常情况下,这个O(n*m)算法的时间复杂度是O(n)吧,,,,,,,
已有帐号?
无法登录?
社交帐号登录jQuery contains过滤器实现精确匹配使用方法
字体:[ ] 类型:转载 时间:
contains 选择器选取包含指定字符串的元素。该字符串可以是直接包含在元素中的文本,或者被包含于子元素中。经常与其他元素/选择器一起使用,来选择指定的组中包含指定文本的元素
代码如下: &!DOCTYPE html& &html xmlns="http://www.w3.org/1999/xhtml"& &head& &meta http-equiv="Content-Type" content="text/ charset=utf-8" /& &title&&/title& &!--&script src="/ajax/libs/jquery/1.4.1/jquery.min.js" type="text/javascript"&&/script&--& &script src="/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"&&/script& &script type="text/javascript"& $(function () { //根据select中的option的文本来执行选中 //$("#selectbox option[text='第二项']"); //$("#selectbox option").filter("[text='第二项']"); //上面两种写法都是错误的 //正确写法 $("#btn4").click(function () { var $option =$("#selectbox option:contains('第二项')").map(function(){ if ($(this).text() == "第二项") {
} }); alert($option.length & 0 ? "有对象" : "无对象"); $option.attr("selected", true); }); }); &/script& &/head& &body& &form id="form1"& &div& &select id="selectbox"& &option value="1"&第一项&/option& &option value="2"&第二项&/option& &option value="21"&第二项1&/option& &/select& &input type="button" id="btn4" value="contains测试" /& &/div& &/form& &/body& &/html&
$(".selector:contains('xx')")   contains()只作匹配查找,不够精确,包含xx的selector和包含xxabc的selector都会查到。 解决办法: ?$(".selector:contains('xx')[innerHTML='xx']")   这样将查找内容只有xx的selector。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具一种用于关键词检索的快速字符串精确匹配算法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
一种用于关键词检索的快速字符串精确匹配算法
上传于||文档简介
&&一​种​用​于​关​键​词​检​索​的​快​速​字​符​串​精​确​匹​配​算​法
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢Elasticsearch:在搜索引擎中如何实现完全匹配内容精确匹配查询
本文地址:
http://blog.csdn.net/hereiskxm/article/details/
在有搜索引擎之前,我们查文档常使用顺序匹配。比如要搜索 &我的祖国是花园&,需要在文档中顺序扫描,找到完全匹配的子句。
在有了搜索引擎后,我们对查询语句做的处理就不一样了。我们通常会先分词,然后查找对应的词条索引,最后得到评分由高到低的文档列表。我一度以为没法实现完全匹配了,直到一个硬需求的出现。花了一天时间,把完全匹配用搜索引擎的思维整理出来。
简要描述实现思路,字段按一字一词的形式分词,再利用短语查询来搜索。
ES中,可以实现一字一词的的分词器是NGram。
Ngram分词的官方文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html
它其实是一个上下文相连续字符的分词工具,可以看官方文档中的例子。当我们将它
min_gram 和 max_gram 都设为1时,,分词的结果是[&s& , &h& , &i& , &n& , &y& , &k& , &e& , &@& , &1& , &8& , &9& , &.& , &c& , &n& ]。
&pre name=&code& class=&javascript&&/index_name/
&settings&: {
&analysis&: {
&analyzer&: {
&charSplit&: {
&type&: &custom&,
&tokenizer&: &ngram_tokenizer&
&tokenizer&: {
&ngram_tokenizer&: {
&type&: &nGram&,
&min_gram&: &1&,
&max_gram&: &1&,
&token_chars&: [
&punctuation&
以上语句中,构建了一个名为“charSplit”的分析器。它使用一个名为“ngram_tokenizer”的Ngram分词器。
可以用如下语句测试charSplit分析器,可以看到一字一词的效果:
curl -POST http://IP:port/{index_name}/_analyze?pretty&analyzer=charSplit
&测试语句&
把这个分析器在mapping里用起来:
&sender&: {
&type&: &string&,
&store&: &yes&,
&analyzer&: &charSplit&,
&fields&: {
&type&: &string&,
&index&: &not_analyzed&
接下来就可以用match_phrase来实现完全匹配查询。
/{index_name}/{type_name}/_search
&query&: {
&multi_match&: {
&query&: &@&,
&type&: &phrase&, //type指定为phrase
&slop&: 0,
//slop指定每个相邻词之间允许相隔多远。此处设置为0,以实现完全匹配。
&fields&: [
&analyzer&: &charSplit&, //分析器指定为charSplit
&max_expansions&: 1
&highlight&: {
//测试高亮是否正常
&pre_tags&: [
&post_tags&: [
&fragment_size&: 100,
&number_of_fragments&: 2,
&require_field_match&: true,
&fields&: {
&sender&: {}
}phrase查询原始的作用是用来做短语查询,它有一个重要的特点:有顺序。我们利用了它匹配的有序性,限制slop为0,则可实现完全匹配查询。
以上语句返回的结果是:
&took&: 18,
&timed_out&: false,
&_shards&: {
&total&: 9,
&successful&: 9,
&failed&: 0
&total&: 1,
&max_score&: 0.,
&_index&: &index_name&,
&_type&: &type_name&,
&_id&: &AU9OLIGOZN4dLecgyoKp&,
&_score&: 0.,
&_source&: {
&sender&: & &&, 李X &&, 秦X &&, 刘X &&&
&highlight&: {
&sender&: [
& &&b&@&/b&&b&1&/b&&b&8&/b&&b&9&/b&&b&.&/b&&b&c&/b&&b&n&/b&&, 李X &&b&@&/b&&b&1&/b&&b&8&/b&&b&9&/b&&b&.&/b&&b&c&/b&&b&n&/b&&, 秦纯X &&b&@&/b&&b&1&/b&&b&8&/b&&b&9&/b&&b&.&/b&&b&c&/b&&b&n&/b&&, 刘X &&
到此,就实现了完全匹配查询。实际环境中用NGram做一字一词分析器的时候会更细致一些,比如有一些字符需要用stop word过滤掉。这些细节可以根据实际需要在构造分析器时添加filter实现,在此不做赘述。
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
在实际应用中,我们需要查询内容要完全匹配其内容.其实很简单.在查询内容前面加上双引号.例如 String q=&\&&+&俄罗斯空军&+&\&&; //q为要查询的数据 QueryStringQueryBuilder queryBuilder = new QueryStringQ ...
页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件.在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信息,并且单元格处于编辑模式时显示一个查询图标的按钮,点击该按钮也将显示数据库中所有商品信息. KryptonDataGridView显示控件此处命名为kDGVI ...
精确匹配和最长匹配 一次投标过程中,客户抓住了市场吹嘘的最长匹配技术问个不停,这是我们后来的澄清.看过很多文章后,虽然原理已经清楚了,但我认为这并不能说明哪个技术更好. 最长匹配和精确匹配 本部分要点: 最早的三层交换机因为硬件结构问题,如果使用最长匹配,需要用软件算法支持,这样必然会导致系统性能的大大降低,所以早期的三层交换机使用了精确匹配技术.利用类似C ...
在互联网的海洋中,最重要的就是互联互通,不被其他网站引用的网站就是“信息孤岛”.“酒好也怕巷子深”,也许这话说起来有点像垃圾邮件广告,但事实就是这样.所以如果做网站的目的不是孤芳自赏,就需要积极的推广自己的网站.通过搜索引擎推广自己需要注意以下几个方面 以量取胜:不一定加入大型网站的分类目录才是网站推广,来自其他网站的任何反相链接都是有用的.网站推广比较经典 ...
一.前言 传统的搜索引擎的定义,是指一种对于指定的查询(Query),能够返回与之相关的文档集合(Documents)的系统.而百度将这个定义更加丰富化,即搜索引擎能够帮助人们更方便的找到所求.这里的&所求&,比&文档&更加宽泛和丰富,比如一个关于天气的查询,直接返回一个天气预报的窗口,而非一篇关于天气的文档:再如一个 ...
一.前言 传统的搜索引擎的定义,是指一种对于指定的查询(Query),能够返回与之相关的文档集合(Documents)的系统.而百度将这个定义更加丰富化,即搜索引擎能够帮助人们更方便的找到所求.这里的&所求&,比&文档&更加宽泛和丰富,比如一个关于天气的查询,直接返回一个天气预报的窗口,而非一篇关于天气的文档:再如一个 ...
您已经创建了一个很棒的站点,接下来该做什么呢?无论这个 Web 站点的目的是销售产品还是提供信息,如果没有人浏览它,您的努力就白费了.让站点受到关注的方法是让它对搜索引擎和实际受众友好. 向搜索引擎 &推销& Web 站点本身已经成了一种业务,许多顾问.工具和搜索引擎优化(SEO)站点都可以帮助您的站点吸引搜索引擎的注意.或许现在的信息和 ...
散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术.在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页.最理想的状态是对联网上所有的网页都分配一个哈希地址,可想而知这是一个相当宠大的数字,但实际上往往是无法做到这一点.虽然google.百度都是采用分布式的机群进行哈希排重,但实际上也 ...}

我要回帖

更多关于 精确匹配和广泛匹配 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信