0

次のような GAE に格納された 60000 ペアのバイリンガル辞書データベースがあります。

日付、タグ、値

日付、ビス、ネジ

日付、ビス、ネジ

日付、ヴィス・ア・ボワ、木ネジ

デイト、ビスアバウトポイント、コーンポイントスクリュー

日付、ブレーザー、ろう付けネジ

日付, vis à métaux, 小ネジ

.

今日は、次の python スクリプトを使用します。

def get_value(self, tag):
  entry = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
  value = entry.value
  value = unicode(value)
  value = value.encode('ascii','xmlcharrefreplace')

「vis」と尋ねると、「screw」しか返ってきません。

質問:

  1. 2 番目の回答として「ねじ」も取得したいと思います。つまり、同じタグを持つすべてのエンティティを取得します。

  2. 部分文字列「screw」を含むすべてのエンティティも取得したいと思います(ユーザーが入力した最小3文字):

ねじ、ねじ、木ねじ、円錐形ねじ、ろう付けねじ、小ねじ

=> このスクリプトによって生成されたテーブルにそれらを表示するには、どの GQL クエリを作成する必要がありますか?

### Show the tags and values as a table.
###def show_stored_data(self):
###  self.response.out.write('''
###    <p><table border=1>
###      <tr>
###         <th>Key</th>
###         <th>Value</th>
###         <th>Created (GMT)</th>
###      </tr>''')
###  entries = db.GqlQuery("          ***GQL query n°1 or n°2***           ")
###  for e in entries:
###    entry_key_string = str(e.key())
###    self.response.out.write('<tr>')
###    self.response.out.write('<td>%s</td>' % e.tag)
###    self.response.out.write('<td>%s</td>' % e.value)
###    self.response.out.write('<td><font size="-1">%s</font></td>\n' % e.date.ctime())
###    self.response.out.write('''
###      <td><form action="/deleteentry" method="post"
###            enctype=application/x-www-form-urlencoded>
###     <input type="hidden" name="entry_key_string" value="%s">
###     <input type="hidden" name="tag" value="%s">
###            <input type="hidden" name="fmt" value="html">
###     <input type="submit" style="background-color: red" value="Delete"></form></td>\n''' %
###                            (entry_key_string, e.tag))
###    self.response.out.write('</tr>')
###  self.response.out.write('</table>')

ご協力いただきありがとうございます。

フィリップ

4

2 に答える 2

0

全文検索が必要なようですね: https://developers.google.com/appengine/docs/python/search/overview

于 2012-10-11T16:18:07.543 に答える
0

1 つの結果のみを取得する

ここに問題があります。オブジェクトで.get()メソッドを使用していることです。GqlQueryドキュメントには次のように記載されています。

クエリのget()メソッドを呼び出して、データストアで見つかった最初の単一の一致するエンティティを取得します。

これを行う場合:

def get_value(self, tag):
  entries = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
  for entry in entries:
    value = entry.value
    value = unicode(value)
    value = value.encode('ascii','xmlcharrefreplace')
    print value

screwとの両方が得られることがわかると思いますscrews

部分文字列

ですべての文字列を"screw"取得することに関しては、あなたが交渉したよりもはるかに難しいでしょう. この SO questionを見てください。を使用することを推奨する回答もありますSearchableModel

のような例vis à <blank>では、フレーズが常に問題のサブタグで始まることがわかっている場合、タグが と の間、またはそれらに沿ったものであるかどうかを確認して、探しているものを取得するためにおそらくとをいじることができます>。行 -- 私は GQL の文字列の並べ替え順序について 100% 明確ではありません。また、現在それに関するドキュメントを見つけることができません。<visvis zzzzzzz

于 2012-10-11T05:26:06.513 に答える