Mysql应用详细介绍基于MySQL的搜索引擎MySQL-Fullltext

Mysql应用详细介绍基于MySQL的搜索引擎MySQL-Fullltext,第1张

概述介绍《Mysql应用详细介绍基于MySQL的搜索引擎MySQL-Fullltext》开发教程,希望对您有用。

《MysqL应用详细介绍基于MysqL的搜索引擎MysqL-Fullltext》要点:
本文介绍了MysqL应用详细介绍基于MysqL的搜索引擎MysqL-Fullltext,希望对您有用。如果有疑问,可以联系我们。

MysqL教程 本文涵盖了一个简单的C实现的搜索引擎的搭建始末.

MysqL教程我通常使用sql Server和C #,但我教C/C++的朋友要远离微软.在过去,MysqL不是我想要的数据库,因为尺度安装版不支持事务,但它变得越来越成熟.我使用64位InnoDB引擎的MysqL 5.6,使用Unicode(utf8)编码,这是我新数据库的默认设置.

MysqL教程Freetext是InnoDB的新特征,它在MysqL5.6版中被初次推出.

MysqL教程与C相比我通常更喜欢C++,即使在小项目中:不用知道所有的函数名,并且有一些内置的常用 *** 作和漂亮的IntelliSense支持.在C++中,还有有STL及集合和字符串助手.

MysqL教程
C++的MysqL接口比拟弱,而C的接口很成熟,所以我决定使用C接口.

MysqL教程C的dll文件是和WCF一起发布的,以便完成AJAX哀求,在Visual Studio ultimate 2012中我使用C#的"WCF Service Application"模板,我搜索了使用C++搭建WebService的方法,但只找到一些使用C++处理WebServices调用的例子.

MysqL教程用户界面是一个使用Jquery和Jquery-UI自动提示的HTML界面,页面被增加到"WCF服务应用",项目被定名为VisionWeb

MysqL教程网页看起来是这样的: 

MysqL教程

MysqL教程 我在.NET框架4.0,64位系统上配置这个项目,如果你使用32位的MysqL服务器,你必须随之做些更改.记得设置UNICODE选项为默认值.

MysqL教程配置MysqL

MysqL教程你有可能会从VisionSmall中打开这个VisionDAL项目,假定你必须修改连接MysqL的C程序接口. 在这儿,我介绍了如安在新项目中安装MysqL接口: 检查那些设置是否符合你的要求,尤其是MysqL.lib文件和VisionDAL.dll的路径.

MysqL教程在Visual Studio中,添加一个VisionDAL工程,通过这个流程"Other Languages/Visual C++/Empty Project". 在这之中,你只必要改变"应用类型" 为DLL. 把VisionDAL.cpp改名为VisionDAL.c,这就清楚的告诉Visual Studio把编译器从C++改为C. 给这个工程添加一个头文件命名为VisionDAL.h.

MysqL教程在窗口中,右击VisionDAL工程并选择属性. 然后在"配置属性"/linker/input,选择 "Additional DependencIEs" 而且添加libMysqL.lib 到这个路径,不要忘记了分隔符 ";".

MysqL教程
在 "配置属性"/linker/General这个菜单下,选择"添加库目录",对我来说就是添加 C:\Program files\MysqL\MysqL Server 5.6\lib>这个目录. 现在我们已经连接到C接口,但是在libMysqL.lib中调用执行的DLL必需是系统的可执行路径: 从控制面板,选择系统,点击 "高级系统设置","点出环境变量" 在 "系统变量"下面,选择路径,并添加这个 libMysqL.lib 的路径 (DLL和这个lib文件在相同的文件夹里): C:\Program files\MysqL\MysqL Server 5.6\lib.

MysqL教程我们也需要把这个VisionDal.dll放到我们的path路径里,IIS 并不能从这个网站的bin目录中取到DLL文件. 添加 <项目路径>/x64/deBUG 到路径变量path里. 重启后生效. 当网站得到一个request哀求时将会加载VisionDAL.dll; 如果你现在重建项目,你会得到一个VisionDAL.dll的写入错误: 为了解决它,重启该网站或是用unlocker之类的解锁.

MysqL教程如果需要指定VisonDAL的包括属性. 在 "配置属性"/"C/C++" 菜单下添加MysqL的头文件路径,例如像这样: C:\Program files\MysqL\MysqL Server 5.6\include.

MysqL教程
下面我们在“C/C++”/"预编译头"菜单栏中,从“预编译头”切换到“不使用预编译头”,设置Preproccessor定义防止使用strcpy和fopen时产生的差错消息:在"C/C++"/预编译器/"预编译器定义 "中设定SE_STANDARD_file_FUNCTIONS和_CRT_SECURE_NO_WARNINGS.

MysqL教程当你现在连接,MysqLlib引用的问题并没有办理,因为它们是64位处理器.通过在VisionDal中打开工程属性,选择“配置管理”,然后设置为x64平台.

MysqL教程
现在我们来创立名为 Vision 的样本数据库

MysqL教程打开sql Development 中的 MysqL 工作台,打开你的实例.将会出现一个新窗口 "sql file 1" . 双击VisionDAL项目中的 sql.txt 文件.复制所有内容到剪贴板,粘贴到工作台中的"sql file 1"窗口. 点击螺栓图标(左边第三个图标),创建样本数据库.
接下来我们必要用来数据库登录的通用信息.

MysqL教程我们有一个关于此的配置文件: <installation director>VisionSmall\x64\DeBUG\VisionConfiguration.txt,看起来像这样:
 

代码如下:
Host: localhost
User: root
Password: frob4frob
Database: vision
Port: 3306

MysqL教程改动这些数值以匹配你的sql-Configuration.

MysqL教程Vision 数据库

MysqL教程数据库中只有一张表
 

MysqL教程CREATE table 'document' ( 'documentID' int(11) NOT NulL auto_INCREMENT,'Title' varchar(255) DEFAulT NulL,'Text' text,PRIMARY KEY ('documentID'),FulLTEXT KEY 'ft' ('Title','Text'),FulLTEXT KEY 'ftTitle' ('Title')) ENGINE=InnoDB auto_INCREMENT=5 DEFAulT CHARSET=utf8;

MysqL教程搜索的时候我们使用名为'ft'的全文索引,查找自动完成单词的时候我们使用名为'ftTitle'的全文索引.

MysqL教程如果你拥有一个很多字段的全文索引,你可以在Microsoft sql Server中选择,查询的时候,哪个字段被包括进搜索.在MysqL中,通常全文索引的所有字段都被搜索,所以我们必须指定额外的全文索引'ftTitle'.

MysqL教程通过C接口进行MySQL查询
首先呢,为了执行查询我们必要连接到数据库并取得一个MysqL的指针:
 

MysqL教程  MysqL *Connect(){  MysqL *conn; // Connection   // 连接到MysqL  conn = MysqL_init(NulL);  if(MysqL_real_connect(    conn,Configuration.Host,Configuration.User,Configuration.Password,Configuration.Database,Configuration.Port,NulL,0) == NulL) {      fprintf(stderr,"sorry,no database connection ...\n");      return NulL;  }  return conn;}

MysqL教程在启动的时候我们把VisionConfiguration.txt文件里的变量赋值到全局变量,这个文件应该和我们的法式在同一目录. 这是一个例行 *** 作.获取当前运行法式目录是通过Win32 API的Getmodulefilename函数,如下:

MysqL教程 

MysqL教程TCHAR *GetExecutablePath(){  TCHAR *pBuf = (TCHAR *)malloc(512);  int bytes = Getmodulefilename(NulL,pBuf,255);  if(bytes == 0)    return NulL;  else    return pBuf;}

MysqL教程这里只有一个程序我们想要阐明:Getdocuments. 在头文件定义:
 

MysqL教程#define FORMAT_TEXT 0#define FORMAT_JsON 1

MysqL教程__declspec(dllexport) TCHAR*   __cdecl Getdocuments(TCHAR *search,int format,int forautocomplete);
在资源文件中界说:
 
__declspec(dllexport) TCHAR* Getdocuments(TCHAR *search,int forautocomplete)

MysqL教程__declspec(dllexport)的声明和定义实现是通过添加到VisionDAL.lib文件并通过VisionDAL.dll文件输出.__cdecl定义如何调用这个过程,这里我们使用C风格的调用约定.当UNICODE定义被设置时,TCHAR和WCHAR是一样的,否则TCHAR便是一个简单的char,假定我们这里的UNICODE 已经设置好了.

    注意这里有一些不同的 Unicode格式:     在C语言里我们使用两个字节来表现一个char值     在MysqL和.NET 框架的UTF-8格式,它意味着一个字节对应一个字符并且仅在超过一个字节被使用时     在终端程序中通过用一个字符对应一个字符并且当值大于127时使用codepage 850.

MysqL教程参数格式是 FORMAT_TEXT 和 FORMAT_JsON,来保证输出在text和 JsON之间.

MysqL教程如果forautocomplete是true,那么只有题目被搜索并返回.

MysqL教程VisionDALClIEntConsole

MysqL教程VisionDALClIEntConsole是一个很小的windows Console应用法式.测试我们的Getdocuments法式将会涉及到VisionDAL工程集合,它将文件从VisionDAL输出到 VisionSmall\x64\DeBUG .

MysqL教程VisionDALClIEntConsole 发出搜索字串哀求,包括通配符“*”,它将会搜索Title列和text列,并通过调用Getdocuments将字符输出.

MysqL教程一个简单的例子: 

MysqL教程

MysqL教程 main 入口:
 

MysqL教程int _tmain(int argc,TCHAR* argv[]){  char c;  TCHAR *result;  TCHAR *search = (TCHAR *)malloc(1000*2);  char *searchA = (char *)malloc(1000);  int retval = 1;  char buffer[32000];   buffer[0]=0;  printf("Search for: ");  /* wscanf doesn't get umlauts */  if(scanf("%[^\n]",searchA) <= 0){    printf("Could not read input - retrIEving all documents \n");    *search=0;  }else{    MultiBytetoWIDeChar(850,searchA,-1,search,999);  }  result=Getdocuments(search,FORMAT_TEXT,0);  if(result == NulL){    retval = 0;    }else{    WIDeCharToMultiByte(850,result,buffer,32000,NulL);    printf("%s",buffer);  }  fflush(stdin);  printf("Press RETURN Key to Exit\n");  getchar();  return retval;}

MysqL教程在Microsoft C V.12中依照惯例可以处理Unicode-16字串.在函数字串开始加上w或是用wcs替换str,如:wscanf,wprintf以及wcslen替换的是strlen.用wscanf不能正确的处理宽窄字符转化.我用MultiBytetoWIDeChar,codepage用850来转化宽字符和用WIDeCharToMultiByte转化为一般字符.

MysqL教程查询MysqL数据库

MysqL教程上面我演示了如何连接数据库以及得到一个叫做conn的连接点.

MysqL教程接下来我们建立SQL查询:
 

MysqL教程MysqL_query(conn,"SET nameS 'utf8'");if(forautocomplete){  if(search == NulL || wcslen(search) ==0){    WIDeCharToMultiByte(CP_UTF8,L"SELECT Title from document liMIT 20",sql,1000,NulL);  }else{    wsprintf(lbuffer,L"SELECT Title,match(Title) against('%ls' IN     BOolEAN MODE) as score from document where match(Title) against('%ls'     IN BOolEAN MODE) > 0.001 order by score Desc liMIT 20",search);    WIDeCharToMultiByte(CP_UTF8,lbuffer,NulL);  }}else if(search == NulL || wcslen(search) ==0){  WIDeCharToMultiByte(CP_UTF8,L"SELECT documentID,Title,Text from document",NulL);}else{      wsprintf(lbuffer,Text,match(Title,Text)       against('%ls' IN BOolEAN MODE) as score from document where match(Title,Text)       against('%ls' IN BOolEAN MODE) > 0.001 order by score Desc",search);  WIDeCharToMultiByte(CP_UTF8,NulL);}

MysqL教程查询match(Title,Text) against('%ls' IN BOolEAN MODE)在列Title和Text中查询要搜索的字符串,并返回一个反馈查询匹配情况的值.只有分数大于0.001的文档将显示,输出成果按评分排序.

MysqL教程IN BOolEAN MODE时多个单词的搜索分离进行.

MysqL教程在搜索字符串中,你可以使用“*”作为通配符,它匹配0到n个字符.例如“as*”会匹配ASP.搜索不区分年夜小写.在sql server中有些例外,“as**”不匹配任何内容,“*SP”也不匹配,你可以在字符串的开头匹配通配符.

MysqL教程得到数据

MysqL教程 

MysqL教程if(MysqL_query(conn,sql)) {  fprintf(stderr,"%s\n",MysqL_error(conn));  fprintf(stderr,sql);  return NulL;}  // Process resultsresult = MysqL_store_result(conn);  ...  while((row = MysqL_fetch_row(result)) != NulL) {  if(format == FORMAT_TEXT){    MultiBytetoWIDeChar(CP_UTF8,row[0],255);    wsprintf(resultBufferp,L"%s\t",buffer);    resultBufferp+=wcslen(buffer)+1;    MultiBytetoWIDeChar(CP_UTF8,row[1],row[2],32000);    wsprintf(resultBufferp,L"%s\n",buffer);    resultBufferp+=wcslen(buffer)+1;  }else if(format == FORMAT_JsON){    if(!forautocomplete){      MultiBytetoWIDeChar(CP_UTF8,255);      wsprintf(resultBufferp,L"{\"documentID\": %s,",buffer);      resultBufferp+=wcslen(buffer)+wcslen(L"{\"documentID\":,");      MultiBytetoWIDeChar(CP_UTF8,L"\"Title\": \"%s\",buffer);      resultBufferp+=wcslen(buffer)+wcslen(L"\"Title\": \"\",32000);      wsprintf(resultBufferp,L"\"Text\": \"%s\"},buffer);      resultBufferp+=wcslen(buffer)+wcslen(L"\"Text\": \"\"},");    }else{      MultiBytetoWIDeChar(CP_UTF8,L"\"%s\",buffer);      resultBufferp+=wcslen(buffer)+wcslen(L"\"\",");    }  }}

MysqL教程MysqL_query 将查询发送到服务器.MysqL_store_result将成果准备为一个集合,你可用MysqL_fetch_row(result)进行迭代.无论列具有什么数据类型,每行都是一个字符串数组.我更喜欢ADO.NET中的具有类型的列.在.NET中,我们可能使用StringBuilder来聚集成果字符串,这里我们通过malloc和增长resultBufferp指针来定位char[].我们使用MultiBytetoWIDeChar来转换到WCHAR.
 
 JsON 格式

MysqL教程我决定不采纳XML格式,而使用轻量级的 JsON-格式,以此来从Web页面通过AJAX与Webservice通讯.

MysqL教程JsON-输出看起来像这样
 

MysqL教程[{"documentID": 1,"Title": "ASP MVC 4","Text":   "Was für Profis"},{"documentID": 2,"Title": "Jquery","Text": "Hat AJAX Support"},{"documentID": 3,"Title": "WebServices","Text": "Visual C++ kanns nicht"},{"documentID": 4,"Title": "Boost","Text": "Muss Extra installIErt werden"}] 在参数自动完成为真的时候,JsON-看起来像这样:?1 ["ASP MVC 4","Jquery","WebServices","Boost"]

MysqL教程  "[]" 符号表明了一个数组的开始与结束,"{}" 标明了一个对象的开始与结束.在一个对象中,":"前面的部分是属性名称,在它后面的部分是属性值.与之类似的,在你用JavaScript编码的时候也差不多一样.通过JavaScript-命令JsON.parse,你得到一个完整的对象,这个对象的属性可以通过通常的"." 符号拜访.

MysqL教程为 Getdocuments 办法搭建 Webservice

MysqL教程我使用"Visual C#/WCF/WCF Service Application"模板创建了 VisionWeb项目,需要添加需要的System.ServiceModel引用.

MysqL教程下一步我们使用 NuGet 来添加需要的 JavaScript 库.选择 "Tools/library Packet Manager/Package Manager Console" 并执行如下命令:
 

MysqL教程Install-Package jqueryInstall-Package jquery.UI.Combined

MysqL教程下一步我们在 “  App-Code/IVisionService.cs” 文件中界说 service contract  :
 

MysqL教程namespace VisionServices{  [ServiceContract(SessionMode = SessionMode.Allowed)]  public interface IVisionService  {    [OperationContract]    [WebInvoke(      Method = "POST",BodyStyle = WebMessageBodyStyle.WrappedRequest,RequestFormat = Webmessageformat.Json,ResponseFormat = Webmessageformat.Json)]    string Getdocuments(string search,int forautocomplete);    } }

MysqL教程WebInvoke 属性是保证 service 能够被AJAX调用.我选择POST作为在http哀求中传递参数的方式.这个可选择的 GET 方式,会加密并且暴露在URL中的参数.
我们指定以JsON格式发送哀求和响应.当传递一个或多个参数时必须使用

MysqL教程BodyStyle = WebMessageBodyStyle.WrappedRequest.
你可以使用 WebMessageBodyStyle.bareif,这样你会获得零或者一个参数.

MysqL教程Webservice的实现

MysqL教程我们将实现界说在 "App-Code/IVisionService.cs"中:
 

MysqL教程namespace VisionServices{  public class PInvoke  {    [Dllimport("VisionDAL.dll",CharSet = CharSet.Unicode)]    public static extern string Getdocuments(string search,int forautocomplete);  }  public class VisionService : IVisionService  {    public string Getdocuments(string search,int forautocomplete)    {      string result = PInvoke.Getdocuments(search,format,forautocomplete).ToString();      return result;    }  }}

MysqL教程VisionService.svc的实现

MysqL教程 

MysqL教程<%@ ServiceHost Language="C#" DeBUG="true" Service="VisionServices.VisionService" CodeBehind="App_Code\VisionService.cs" %>

MysqL教程这里定义了挪用"http://<your webserver>:<your port>VisionService.svc"时的服务端点,挪用Getdocuments函数的URL地址是 "http://<your webserver>:<your port>VisionService.svc/Getdocuments".

MysqL教程Web.config 文件
 

MysqL教程<?xml version="1.0"?><configuration> <appSettings/> <system.web>  <httpRuntime/>  <compilation deBUG="true"/> </system.web> <system.serviceModel>  <services>   <service name="VisionServices.VisionService">    <endpoint address="" binding="webhttpBinding"       contract="VisionServices.IVisionService" behaviorConfiguration="webhttpEndpoint"/>    <endpoint address="mex" binding="mexhttpBinding" contract="IMetadataExchange"/>   </service>  </services>  <behaviors>   <endpointBehaviors>    <behavior name="webhttpEndpoint">     <webhttp helpEnabled="true"/>    </behavior>   </endpointBehaviors>   <serviceBehaviors>    <behavior>     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>     <serviceDeBUG includeExceptionDetailinFaults="true"/>    </behavior>   </serviceBehaviors>  </behaviors>  <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true"/> </system.serviceModel> <system.webServer>  <modules runAllManagedModulesForAllRequests="true"/>  <directorybrowse enabled="true"/> </system.webServer></configuration>

MysqL教程这是允许AJAX哀求的配置. 你可以使用很多选项来配置WCF.你可以到Safari上查看更多类似于[2]的文档.

MysqL教程<endpoint address="mex" binding="mexhttpBinding" contract="IMetadataExchange"/>配置了一个提供元数据交换的端点,通过元数据你可以自动生成代码来获得WebService代理,比如使用svcutil.选择"Programs/Microsoft Visual Studio 2012/Visual Studio Tools/Developer Command Prompt for VS2012". 输入svcutil http://localhost:8001/VisionService.svc.一个名为VisionService.cs 的文件就生成了,在其他情况下也会生成一个包括了Webservice配置信息的文件.

MysqL教程托管网站

MysqL教程启动“设置/控制面板/管理工具/ Internet信息服务(IIS)管理器”.当没有安装IIS的时候,导航到“应用程序池”,找到正在运行.Net Framework 4.0版本应用程序池的名称,或者添加一个新的应用程序池.导航到“网站”节点,右击它,然后选择“添加网站...”,使用Vision作为网站的名称,为这个应用选择一个正在运行的 .Net Framework 4.0版本应用池.使用 <vision installdir>/VisionWeb作为物理路径,设置端口为8001.选择属性上VisionWeb项目,选择“网络”,选中“使用自定义的Web服务器”,输入服务器URL http://localhost:8001.你可以使用其他的选项来托管网站,例如在IIS Express中,但是如果你不想改变Default.HTML文件,你必需将端口设置为8001.

MysqL教程HTML/Jquery 页面

MysqL教程在VisionWeb中有个名为Default.HTML的单一HTML页面,它包括了HTML与JavaScript的内容,它被标为起始页.

MysqL教程同样这里是这个页面的样子:

MysqL教程

MysqL教程<HTML><head>  <Title>Search</Title>  <script src="Scripts/jquery-2.0.2.Js"></script>  <script src="Scripts/jquery-ui-1.10.3.Js"></script>  <link href="Content/themes/base/jquery.ui.autocomplete.CSS" rel="stylesheet" />  <style type=text/CSS>    .ui-menu-item {      background: White;    }    .ui-helper-hIDden-accessible { display:none; }  </style></head>

MysqL教程HTML代码说明了这是一个HTML 5的文档类型.接着我们包括进了必须的JavaScript文件.在jquery-UI中我们只用到了自动完成插件,为此我们还包括了它的CSS文件.

MysqL教程对于自动完成对象,包括了类[__em all="[object HTMLCollection]"__] .ui-menu-item,我们将背景设置为白色,不然的话它的透明背景会使表格的内容穿透出来.

MysqL教程
[__em all="[object HTMLCollection]"__].ui-helper-hIDden-accessible { display:none; }将一个烦人的赞助信息从自动完成插件移走.
 

MysqL教程<form>    <label for="search" >Search:</label>    <input type="text" ID="search",name="search" />    <input type="button" ID="update" name="update" value="Update" />     <div ID="result"></div>  </form>

MysqL教程表单中的元素被赋以了ID,因此你可以类似$('#result')用jquery获得它们.你还可以用jquery取代缩写的$,例如[__em all="[object HTMLCollection]"__] jquery('#result').JavaScript的函数调用document.getElementByID('result')具有同样的效果,但是jquery支持所有类型的CSS选择符.

MysqL教程
我使用无侵入的JavaScript,也就是说HTML代码没有混在JavaScript代码中.事件处理器是在function$(document).ready(function ()办法中绑定的,这个办法会在页面加载后执行. 

MysqL教程$(document).ready(function () {  $('#update').bind('click',Getdocuments);  $('#search').bind("keydown",Getinput);  $("#search").autocomplete({    source: function (request,callback) {      Getautocomplete();      callback(documents);    },open: function (event) {      var $ul = $(this).autocomplete("Widget");    }  });});

MysqL教程当你点击"update"按钮的时候会执行Getdocuments办法.它会进行一次全文检索然后将结果显示到一个HTML表格中:
 

MysqL教程function Getdocuments(e) {var searchstring = $('#search').val();if (searchstring.length > 0) {  if (searchstring[searchstring.length - 1] != "*") {    searchstring += "*";  }}$.AJAX({    type: 'POST',url: 'http://localhost:8001/VisionService.svc/Getdocuments',dataType: 'Json',crossDomain: true,data: JsON.stringify({ search: searchstring,format: 1,forautocomplete: 0 }),processData: true,ContentType: "application/Json ; charset=utf-8",success: function (Json,textStatus) {      var result = JsON.parse(Json);      var display;      display = "";      display += "<table ID='mytable' border=2 <thead><th style='text-align:left'         >ID</th><th style='text-align:left' >Title</th><th         style='text-align:left' >Text</th></thead><tbody>";      $.each(result,function (index,value) {        display += "<tr>";        display += "<td>" + value.documentID + "</td>";        display += "<td>" + value.Title + "</td>";        display += "<td>" + value.Text + "</td>";        display += "<tr>";      });      display += "</tbody></table>";      $('#result').empty()      $('#result').HTML(display);    },error: function (xhr,textStatus,errorThrown) {      alert('An error occurred! ' + (errorThrown ? errorThrown : xhr.status) +       " xhr: " + xhr + " textStatus: " + textStatus);    }  });}

MysqL教程我们把查询表单中"search"字段的值付给变量searchstring,然后,当searchstring中不包含"*"通配符的时候,我们在其后面添加通配符"*",jquery提供了对AJAX的支持,比如$.AJAX()办法.

MysqL教程你可以从这儿查看关于这个办法的说明:jquery.AJAX().

MysqL教程url:制定了我们在WCF应用中配置好的路径.就如我们在WCF应用中设置的一样,我们使用JsON数据格式.在success方法(这个方法会在AJAX哀求成功后被异步调用)中,我们获取了Json变量,也就是Getdocuments方法输出的值.通过简单的调用JsON.parse(Json)方法,我们获得了一个完全成熟的JavaScript对象,我们使用这个对象生成HTML表格.result>变量是一个JavaScript对象数组.jquery的$.each方法遍历整个数组,当方法执行的时候,使用当前数组元素的索引和处于当前索引位置的元素作为参数.我们通过调用$('#result').HTML(display)来显示HTML代码,从而生成我们的结果div.底层数据:我们使用JsON.stringify方法将用来传输的数据转化为JavaScript对象并将其作为参数.当发生错误的时候,在error:后面的代码将会执行.

MysqL教程自动完成是如何工作的

MysqL教程在我们的 JavaScript 代码开头,我们描述了一个全局变量,用来将用于自动完成的单词保留在一个数组中:var documents = [];. 函数Getautocomplete填充了documents数组. autocomplete函数:
 

MysqL教程function Getautocomplete(e) {  var searchstring = $('#search').val();  if (searchstring.length > 0) {    if (searchstring[searchstring.length - 1] != "*") {      searchstring += "*";    }  }  $.AJAX({    type: 'POST',forautocomplete: 1}),async: false,textStatus) {      documents = JsON.parse(Json);    },errorThrown) {      alert('An error occurred! ' + (errorThrown ? errorThrown : xhr.status) +       " xhr: " + xhr + " textStatus: " + textStatus);    }  });}

MysqL教程这看起来非常像Getdocuments函数.success 函数只是更新了documents变量,通过JsON.parse来将Webservice的输出进行转换.注意async: false,这使得挪用是异步的.这个自动完成插件会挪用Getautocomplete函数,并立即显示documents.

MysqL教程
在 $(document).ready(function () 中初始化自动完成插件:
 

MysqL教程$("#search").autocomplete({  source: function (request,callback) {    Getautocomplete();    callback(documents);  },open: function (event) {    var $ul = $(this).autocomplete("Widget");  }});

MysqL教程你可以在这里找到关于自动完成的信息:自动完成.

MysqL教程在搜索框中处置 [RETURN] 键:
 

MysqL教程$('#search').bind("keydown",Getinput); function Getinput(e) {  if (e.keyCode == 13) {    e.preventDefault();    Getdocuments(e);    $('#search').autocomplete("close");  }}

MysqL教程e.preventDefault();停止了对当前变乱的处理.

MysqL教程调试

MysqL教程你可以在web浏览器中输入 URL http://localhost:8001/VisionService.svc.如果服务激活失败,将会有一条信息提示,例如 VisionDAL.dll 无法加载.你可以用像fiddler 之类的对象检测其间的http通信.

欢迎参与《MysqL应用详细介绍基于MysqL的搜索引擎MysqL-Fullltext》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。

总结

以上是内存溢出为你收集整理的Mysql应用详细介绍基于MySQL的搜索引擎MySQL-Fullltext全部内容,希望文章能够帮你解决Mysql应用详细介绍基于MySQL的搜索引擎MySQL-Fullltext所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1153792.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存