哈尔滨市哪里做淘宝网站app软件开发专业公司
news/
2025/9/23 16:30:33/
文章来源:
哈尔滨市哪里做淘宝网站,app软件开发专业公司,上海企业一户式查询,营销型网站成功案例gkz cloud sql许多Google AppEngine开发人员一直在等待全文搜索功能#xff0c;特别是来自网络上最大的搜索引擎Google。 我很高兴看到Google团队正在努力#xff0c;您可以在Google I / O 2011会议上查看#xff1a;Bo Majewski和Ged Ellis进行的全文本搜索 。 据我所知特别是来自网络上最大的搜索引擎Google。 我很高兴看到Google团队正在努力您可以在Google I / O 2011会议上查看Bo Majewski和Ged Ellis进行的全文本搜索 。 据我所知非常有前途的索引服务尚不可用。 在本文中我将说明如何使用可用的App Engine服务在应用程序中提供某种全文本搜索。 在我的特定用例中我不需要很多功能只需要简单地在与实例无关的情况下在我的实体的各种属性中搜索字符串以及可能的特殊字符例如èé…。 我还远不是Google Datastore API的专家但我没有找到直接使用Java API实现此目标的任何简单方法。 解决此问题的方法是将部分数据复制到Google Cloud SQL中以使用MySQL全文搜索功能。 先决条件 要完成以下任务您需要 安装Google AppEngine SDK for Java 安装MySQL 5.5 具有AppEngine和Cloud SQL服务的Google帐户。 可选 Eclipse插件用于开发调试和部署我的Web应用程序到GAE 内容 在以下各段中我将解释用于全文搜索的Cloud SQL集成的基础知识但是如果需要可以跳至 完整的应用程序代码 https : //github.com/tgrall/gae-full-text-search 看一下正在运行的应用程序 http : //gae-fulltext-search.appspot.com/ 1.创建文章实体 首先创建一些具有某些属性的简单实体例如具有标题和正文属性的实体名称Article。 import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;//...
//...Entity article new Entity(Article);article.setProperty(title, MySQL Tutorial);article.setProperty(body, DBMS stands for DataBase ...);datastore.put(article);article new Entity(Article);article.setProperty(title, Datastore Index Selection and Advanced Search);article.setProperty(body, Learn how recent improvements to the query planner ... function in your application);datastore.put(article); 如果您查看数据存储区API甚至JDO或JPA就没有简单的方法来查找与铁人三项数据库或实体相关的所有文章。 Google DataStore不支持在不同字段之间使用“或”的子句 我不想提及一个事实即不可能以简单的方式忽略文本大小写。 这就是为什么我们需要一些全文功能。 你们中的某些人肯定在考虑使用Apache Lucene来解决问题是的这是可能的。 例如您可以使用GAELucene项目 http : //code.google.com/p/gaelucene/ 。 我使用另一种方法在“索引/搜索”选项方面可能不太先进但足以满足我的用例 我将要在其中进行搜索的文本值存储在Google Cloud SQL中并使用MySQL的“全文本”功能。 2.创建一个SQL表来存储文本值在开发环境中 使用Google AppEngine时将使用特定的驱动程序和配置访问Cloud SQL实例我们将在以后看到。 目前我们仍处于开发环境中这是您必须使用本地MySQL实例的地方。 在这个特定的用例中我们将在表中复制这两个字段并基于实体键添加一个新的唯一键。 所以在这里用SQL创建这个 CREATE SCHEMA search_values DEFAULT CHARACTER SET utf8 ;USE search_values;CREATE TABLE articles (entity_key varchar(250),title text,body text,PRIMARY KEY RESULTS_PK (entity_key),FULLTEXT (title,body)
) ENGINEMyISAM DEFAULT CHARSETutf8; 第1行和第3行在这里创建数据库模式并使用它。 然后脚本将创建一个表其中将包含来自实体的标题和正文的副本。 3.配置您的开发环境 本部分是Cloud SQL文档的简短说明 入门Java 将MySQL JDBC驱动程序复制到/lib/impl/下的Google App Engine SDK目录中。 您可以在此处下载MySQL JDBC驱动程序。 在Eclipse中选择您的Java包。 单击运行 运行配置 。 展开“ Web应用程序”菜单项。 将以下行添加到“ VM参数”窗格中 -Drdbms.serverlocal
-Drdbms.drivercom.mysql.jdbc.Driver
-Drdbms.urljdbc:mysql://localhost:3306/search_values?userusernamepasswordpassword 单击类路径选项卡。 选择您的项目然后单击“ 添加外部JAR”。 导航到Google App Engine SDK目录然后导航到lib/impl 然后选择JDBC驱动程序JAR文件。 点击打开 。 驱动程序JAR在“ 用户条目”下列出 。 点击应用 。 现在您的开发环境已准备就绪可以使用本地MySQL数据库了。 现在使用此数据库。 4.使用您MySQL表并将文本值从Google Datastore复制到MySQL表 将数据从数据存储区实体复制到表非常简单 Connection conn null;try {DriverManager.registerDriver(new AppEngineDriver());conn DriverManager.getConnection(jdbc:google:rdbms://[your db instance]/search_values);conn.setAutoCommit(false); String statement REPLACE INTO articles (entity_key, title, body) VALUES( ? , ? , ? );PreparedStatement stmt conn.prepareStatement(statement);DatastoreService datastore DatastoreServiceFactory.getDatastoreService();Query q new Query(Article); PreparedQuery pq datastore.prepare(q);// loop on each entity and insert the values in the SQL Tablefor (Entity result : pq.asIterable()) {stmt.setString(1, KeyFactory.keyToString(result.getKey()) );stmt.setString(2, result.getProperty(title).toString() );stmt.setString(3, result.getProperty(body).toString() );stmt.executeUpdate();conn.commit();}} catch (SQLException e) {e.printStackTrace();} finally {if (conn ! null)try {conn.close();} catch (SQLException ignore) {}} 与标准的Java Web Development相比这里有一些特别的东西 我直接在代码中管理连接 如果可以在Google AppEngine的上下文中使用数据源/连接池我还没有看过 第3行注册负责管理连接的AppEngine驱动程序特别是在开发-本地MySQL-或生产模式-CloudSQL-中工作。 第4行获取连接。 有趣的是在开发中连接URL是从您先前设置的环境变量Drdbms.url中获取的。 稍后我们将看到如何将其转移到云中。 这是AppEngineDriver的神奇部分它可以根据上下文管理不同的连接类型Local MySQL或CloudSQL 在这些行之后代码非常简单 从数据存储区获取所有Articles实体并循环 “更新”数据库记录REPLACE INTO语法 第15行使用KeyFactory.keyToString方法将实体的Key存储在安全的字符串中。 如果要测试此代码只需将此行放在servlet中以将数据存储中的数据“ sycnhronize”到MySQL表中。 显然这些代码只是在这里用于学习建议应该以更好的方式集成到实际应用程序中。 首先是在创建/更新和删除;实体时将数据推送到数据库中。 GitHub上的示例代码包含这些方法。 5.实施搜索方法 目标是简单返回由简单搜索条件返回的实体列表 公共Iterable searchEntities字符串查询 逻辑很简单 执行SQL查询 对于每个结果请使用密钥获取实体 返回实体列表 public IterablesearchEntity(String query) {List results new ArrayList();Connection conn null;try {DriverManager.registerDriver(new AppEngineDriver());conn DriverManager.getConnection(jdbc:google:rdbms://[your db instance]/search_values);String statement SELECT entity_key FROM articles WHERE MATCH (title,body) AGAINST (? WITH QUERY EXPANSION);;PreparedStatement stmt conn.prepareStatement(statement);stmt.setString(1, query);ResultSet rs stmt.executeQuery();while (rs.next()) {String keyAsString rs.getString(1); Entity article DatastoreServiceFactory.getDatastoreService().get( KeyFactory.stringToKey(keyAsString) );results.add(article);}} catch (SQLException e) {e.printStackTrace();} catch (EntityNotFoundException e) {e.printStackTrace();} finally {if (conn ! null)try {conn.close();} catch (SQLException ignore) {}}return results;} 在这种方法中系统连接到数据库然后执行查询以使用任何类型SQL / MySQL查询搜索数据。 在此示例中我将全文功能与“ WITH QUERY EXPANSION ”一起使用。 如果这足以满足您的应用程序需求那么显然可以使用任何类型SQL查询例如简单的LIKE语句。 通过这种方法当我搜索 “数据库”该方法独立于大小写返回有关数据库mysqlRDBMS的所有文章。 “索引”该方法返回所有有关索引/索引或搜索的文章。 6.部署到GAE 一旦创建了应用程序并激活并配置了CloudSQL实例 在此处 就可以部署应用程序并享受将全文搜索与GAE结合使用的简便方法。 结论 在本文中我解释了如何基于MySQL对全文的支持使用Google Cloud SQL轻松支持全文搜索查询。 我在本文中分享的代码段确实是基本的还没有为实际使用做好准备但仍然是一个不错的起点。 例如我在我的GAE Queues应用程序中一直使用它来管理大量数据的索引。 如前所述您可以在http://gae-fulltext-search.appspot.com/上在线测试该应用程序并且源代码可在GitHub上找到 https : //github.com/tgrall/gae-full-text-搜索 参考来自Tug博客博客的JCG合作伙伴 Tugdual Grall 使用Google Cloud Cloud SQL进行Google AppEngine全文搜索 。 翻译自: https://www.javacodegeeks.com/2012/06/google-app-engine-full-text-search-with.htmlgkz cloud sql
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913163.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!