2013-03-27 38 views
2

我正在使用java與應用程序引擎。 SQL查詢:「喜歡a%」。如何在應用程序引擎上編寫此代碼?

SELECT * FROM人,其中名稱,比如 「一%」

如何把它寫在谷歌應用程序引擎?

+0

您使用數據存儲還是SQL數據庫? – Thilo 2013-03-27 04:49:06

+3

這是爲什麼關閉?這是一個完全有效的問題。 – 2013-03-27 12:32:42

+0

你只需要做這種特殊情況(區分大小寫,固定前綴字符串搜索)還是一般LIKE搜索? – Thilo 2013-03-28 03:46:37

回答

1

Appengine的數據存儲中不支持LIKE運算符。

兩個解決方案:

  • 使用谷歌雲SQL如果你想保持類似SQL的查詢
  • 使用Full Text Search與您實體數據存儲
0

你在找這個"select * from Person where name LIKE \"a%\""

2

假設你對查詢在App Engine數據存儲區的實體,在Java中你已經重寫LIKE "a%"成類似

Query query = new Query("Person") 
    .addFilter("name", QueryFilterOperater.GREATER_THAN_OR_EQUAL, "a") 
    .addFilter("name", QueryFilterOperator.LESS_THAN, "b"); 

其餘部分留作練習。請參閱https://developers.google.com/appengine/docs/java/datastore/queries

+0

這並沒有解決問題(如何做LIKE)。看看其他答案,這似乎是不平凡的,不是「作爲練習留下」的東西。 – Thilo 2013-03-28 01:59:58

+1

再看一遍。這樣將「a%」改寫爲> =「a」AND <「b」。 – 2013-03-28 03:11:03

+0

好的,在這種特殊情況下(模式只是區分大小寫的固定前綴),這將是使用LIKE的替代方案。但是我根本沒有從你的答案中得到這一點。添加一些解釋,我將刪除downvote。 – Thilo 2013-03-28 03:25:46

1

要執行,你必須這樣查詢使用Google Cloud SQL

如果您使用數據存儲,那麼它不支持全文搜索。您必須手動創建所有可能的名稱變體並使用它們來查詢實體。您可以將它們存儲在特殊實體的多值字段(可能很昂貴)或使用完全符合此目的的特殊Search API(搜索不支持子字符串匹配,因此您必須使用所有相同的變體)。

這兩個詞與搜索API的工作是:

  1. 列表項在數據存儲上創建個人實體與一些name

  2. 創建相應的搜索索引文件命名爲Persons,與場possible_namesentity_id(也可以使用Document.doc_id來存儲實體的ID)。在possible_names中,您存儲名稱除以空格的所有有用變體。

  3. 查詢Persons索引查找字段possible_names與您的搜索字符串相符的所有文檔。

  4. 使用字段entity_id表單結果的文檔通過id從數據存儲中檢索實體。

Here就是一個小例子。

+0

雖然LIKE不是全文搜索。 – Thilo 2013-03-28 01:57:32

+0

你能解釋一下爲什麼嗎? '全文搜索'我的意思是在某些文本中通過某種模式搜索某些字符串,而不使用某種索引。 LIKE完全一樣,不是嗎? – Denisigo 2013-03-28 05:26:06

+0

全文搜索通常意味着像Lucene這樣的東西,或者你鏈接到的那個搜索API(就像你指出的那樣,不支持子字符串匹配)。特別是,它通常不匹配LIKE搜索(這是子字符串匹配)可以的任意(非標記)模式。 – Thilo 2013-03-28 06:20:57