0

Django で作成している Web アプリケーションの単語をすばやく検索する必要があります。単語の各文字を、位置によってインデックス付けされた独自の整数フィールドに入れることを考えていました。

class Word(models.Model):
    word = models.CharField(max_length=5)
    length = models.IntegerField()

    c0 = models.IntegerField(blank=True, null=True)
    c1 = models.IntegerField(blank=True, null=True)
    c2 = models.IntegerField(blank=True, null=True)
    c3 = models.IntegerField(blank=True, null=True)
    c4 = models.IntegerField(blank=True, null=True)

    mapping = [c0, c1, c2, c3, c4,]

    def save(self):
        self.length = len(self.word)
        for (idx, char) in enumerate(self.word):
            self.mapping[idx] = ord(char)
        models.Model.save(self)

次にWord.objects.filter(length=4, mapping[2]=ord('A'))、3 番目の位置に A を持つ長さ 4 のすべての単語を検索するようなクエリを作成できます。

デザインといくつかの仕組みについてはよくわからないので、実装する前にここで提案を求めようと思いました. クエリを作成するための構文については完全にはわかりません。

だから、私は質問が

  1. デザインについて何か提案はありますか?
  2. うまくいくでしょうかmapping[2]
  3. 可変数のキーワード引数を持つことができるように、フィルター コマンドに辞書を渡すことはできますか?

ありがとう!

4

1 に答える 1

0

マッピング[2]は機能しますか?

いいえ、そうではありません。

可変数のキーワード引数を持つことができるように、フィルター コマンドに辞書を渡すことはできますか?

そうです。例えば:

conditions = dict(word__startswith = 'A', length = 5)
Word.objects.filter(**conditions)

Wordで始まり、A長さが 5 文字のすべてのインスタンスが検索されます。

デザインについて何か提案はありますか?

これは、時期尚早の最適化の場合のように感じます。適度な量のデータの場合、適切なデータベース関数と Django のフィルターを組み合わせて、必要なものを取得できるはずです。

例えば:

3 番目の位置に A を持つ、長さ 4 のすべての単語を検索します。

Django フィルターを (Postgresql の) と組み合わせることができますstrpos

contains, position = 'A', 3
where = ["strpos(word, '%s') = %s" % (contains, position)]
Word.objects.filter(length = 4, word__contains = contains).extra(where = where)
于 2010-09-11T07:13:48.317 に答える