5

次の SearchIndex を持つ干し草の山検索があります。

クラス GrantIndex(indexes.SearchIndex):
    """
    これにより、Grant アプリケーションの検索インデックスが提供されます。
    """
    text = index.CharField(document=True, use_template=True)
    年 = index.IntegerField(model_attr='year__year')
    日付 = インデックス.DateField(model_attr='date')
    program = index.CharField(model_attr='program__area')
    grantee = index.CharField(model_attr='grantee')
    金額 = インデックス.IntegerField(model_attr='金額')
site.register(グラント、グラントインデックス)

「Health」ではないプログラムを除外して検索したい場合は、次のクエリを実行します。

from haystack.query import SearchQuerySet

sqs = SearchQuerySet()
sqs = sqs.filter(program='Health')

残念ながら、これはプログラム 'Health\Other' および 'Health\Cardiovascular' からもオブジェクトを生成します。検索で他のプログラムが許可されないようにするにはどうすればよいですか?

検索バックエンドとして Xapian を使用して Ubuntu 9.10 を実行しています。

4

5 に答える 5

3

あなたはおそらくすでに問題を解決していますが、私は Whoosh バックエンドで同じ問題に出くわしました。Xapian と Whoosh のバックエンドは同じように動作するのでしょうか? Whoosh はデフォルトですべての CharFields をステミングしているようで、その中をある種の contains-query で検索しています。CharFields でステミングを有効にせずにカスタム バックエンドに切り替えると、この問題が解決されました。

うまくいけば、これが他の誰かを正しい方向に押し進めるでしょう.

于 2010-06-07T14:38:29.543 に答える
1

こちら で説明されているように、フィールド ルックアップを使用できます。

sqs = sqs.filter(program__exact='Health')
于 2010-01-28T18:21:20.523 に答える
0

プログラムフィールドに「prepare_data」を使用し、health\blabla のものを取り除きます

于 2011-12-03T20:02:54.880 に答える
0

免責事項: 私は Xapian-Haystack のメンテナーです。

これは、Xapian-Haystack が のような特殊文字をエスケープするターム ジェネレータを使用していたためだと思い/ます。

したがって、あなたの場合、および"Health\Other"としてインデックス化されていました。これは最近、Xapian-Haystack の master ブランチで修正されました。たとえば、こちらを参照してください。"health""other"

于 2014-05-23T09:15:59.203 に答える
0

solr バックエンドの場合、使用する必要があります_exact(2 つではなく 1 つの下線のみ)。

于 2013-08-20T14:45:08.053 に答える