2010-08-20 27 views
5

我使用Django的查询过滤器__search进行全文搜索如Django的全按相关

MyModel.objects.filter(title__search = 'some title') 

我如何得到它的相关命令文本搜索顺序,因为目前它似乎是按字母顺序排序?

具体而言,我希望标题为some title的搜索结果首先出现在标题为a different but contains some title的东西之前。

编辑:

我已经注意到的是,对为MyModel模型定义我:

class Meta: 
    ordering = ['title'] 

如果我删除这则顺序变成正确的,即按相关性排序。那么有没有一种方法可以将它留在模型定义中,因为它在其他地方很有用,但是随后在我的查询中告诉它忽略它?

+1

我不相信它真的下令,你的希望。就像自然顺序一样,它是一个布尔搜索。 – 2010-08-20 12:27:25

+1

我会回应Enrico的评论:鉴于您接受的答案,看起来您仍然错误地认为,如果您删除标题排序,您的结果实际上按相关性排序。情况并非如此:排序无关,您可以通过数据库选择的任何顺序将它们提供给您。 – 2010-09-02 13:53:20

回答

0

Try:Model.objects.all().order_by().search() - calling order_by without any parameters does no ordering at all。除此之外,我会继续Carl的Haystack推荐,特别是因为它允许更复杂的事情,比如说“跳舞”可以匹配“舞蹈”,“舞者”和“跳舞”),faceting(“显示我用户&每个搜索结果的点击次数“),获取与当前显示的对象类似的对象等等。当我上次尝试飞快时,它不稳定(即在索引过程中崩溃),但花了相当短的时间是时候开启Solr了,这很棒。

+0

最近我跟飞快有很好的运气。但它并没有做所有的花哨的东西:阻止是,面朝没有:( – 2010-08-21 00:21:48

+0

我应该注意到,我的Whoosh经验是短暂的,大约一年前,我听说它稳定了,但并没有真正需要它,因为我们由于各种原因已经需要Solr(分面,支持多种语言)。 – 2010-08-21 21:27:15

3

如注意到here,搜索为Boolean

有没有这样的相关性用于排序的系数。

A 愚蠢想法可以通过标题长度排序,这是有道理的。

2

得到一个Django项目良好的全文搜索的最简单方法是使用优秀Haystack应用。设置起来非常容易,特别是如果您使用最简单的搜索引擎后端(Whoosh,这是纯粹的Python)。在几分钟之内,您可以设置全文索引您的内容,并提供相关性排序的结果以及许多其他不错的功能。如果您超过了Whoosh的性能/并发性/功能限制,那么因为您使用Haystack来抽象搜索功能,所以您可以随时使用类似Solr的内容。

0

如果使用Django> = 1,则可以通过使用具有ORDER BY子句的原始搜索来实现相关性。2

File.objects.raw(query_string, params[x,y,z]) 

尽管raw_querset在不支持count()的时刻有它自己的缺点。

但它确实带回模型等是很容易使用,但并不是这么简单,__search