日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索

發布時間:2023/12/3 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

gkz cloud sql

許多Google AppEngine開發人員一直在等待全文搜索功能,特別是來自網絡上最大的搜索引擎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) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第1行和第3行在這里創建數據庫模式并使用它。 然后腳本將創建一個表,其中將包含來自實體的標題和正文的副本。

3.配置您的開發環境

本部分是Cloud SQL文檔的簡短說明: 入門:Java

  • 將MySQL JDBC驅動程序復制到/lib/impl/下的Google App Engine SDK目錄中。 您可以在此處下載MySQL JDBC驅動程序。
  • 在Eclipse中,選擇您的Java包。
  • 單擊運行 > 運行配置
  • 展開“ Web應用程序”菜單項。
  • 將以下行添加到“ VM參數”窗格中: -Drdbms.server=local -Drdbms.driver=com.mysql.jdbc.Driver -Drdbms.url=jdbc:mysql://localhost:3306/search_values?user=username&password=password
  • 單擊類路徑選項卡。
  • 選擇您的項目,然后單擊“ 添加外部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語句。

    通過這種方法,當我搜索:

    • “數據庫”:該方法獨立于大小寫,返回有關數據庫,mysql,RDBMS的所有文章。
    • “索引”:該方法返回所有有關索引/索引或搜索的文章。

    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.html

    gkz cloud sql

    總結

    以上是生活随笔為你收集整理的gkz cloud sql_使用Cloud SQL的Google App Engine全文搜索的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。