5

我有一个干草堆搜索,它具有以下 SearchIndex:

类 GrantIndex(indexes.SearchIndex):
    """
    这为 Grant 应用程序提供了搜索索引。
    """
    text = index.CharField(document=True, use_template=True)
    年 = 索引.IntegerField(model_attr='year__year')
    日期 = 索引.DateField(model_attr='date')
    程序 = 索引.CharField(model_attr='program__area')
    被授权人 = 索引.CharField(model_attr='grantee')
    金额 = 索引.IntegerField(model_attr='amount')
site.register(Grant, GrantIndex)

如果我想搜索过滤掉任何不是“健康”的程序,我运行以下查询:

从 haystack.query 导入 SearchQuerySet

sqs = SearchQuerySet()
sqs = sqs.filter(program='健康')

不幸的是,这也会从程序“Health\Other”和“Health\Cardiovascular”中生成对象。如何阻止搜索允许其他程序进入?

我使用 Xapian 作为搜索后端运行 Ubuntu 9.10。

4

5 回答 5

3

你可能已经解决了这个问题,但我只是偶然发现了 Whoosh 后端的同样问题。也许 Xapian 和 Whoosh 后端的行为相同?似乎 Whoosh 默认阻止所有 CharFields,并使用某种包含查询在其中搜索。切换到自定义后端,没有在 CharFields 上启用词干,为我解决了这个问题。

希望这会将其他人推向正确的方向。

于 2010-06-07T14:38:29.543 回答
1

您可以使用此处描述的字段查找。

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

对程序字段使用“prepare_data”并摆​​脱健康\blabla的东西

于 2011-12-03T20:02:54.880 回答
0

对于 solr 后端,我需要使用_exact(只有一个下划线而不是两个)。

于 2013-08-20T14:45:08.053 回答
0

免责声明:我是 Xapian-Haystack 的维护者。

我相信这是因为 Xapian-Haystack 使用了一个术语生成器,该生成器正在转义特殊字符,例如/.

因此,在您的情况下,"Health\Other"被索引为"health"and "other"。这最近在 Xapian-Haystack 的 master 分支中得到修复,请参见此处

于 2014-05-23T09:15:59.203 回答