2

My question may be a bit strange, but it's been bothering me since the behavior is not what I expected. Here is my query:

query = request.GET.get('q','')
#in search_indexes:
#start_datetime = indexes.DateTimeField(model_attr='start_datetime',null=True)
#end_datetime = indexes.DateTimeField(model_attr='end_datetime')
search_events = SearchQuerySet().models(Event).filter(content=query).
                filter(end_datetime__gte=datetime.now()).
                order_by("start_datetime")

Now I type in a query like "asdfasdfjasldf lolol hwtf asdlfka" and I still get 3 results. (Note, I only have 5 events to start with. Not sure if that could affect anything.) I print out the scores, and they are [42,42,42]. Doesn't filter() match on exact phrases? Especially if I use quotes?

//edit I also tried using auto_query, and the results are the same.

I'm really confused about what's happening, so hopefully somebody can help clear this up. Thanks in advance!

4

2 回答 2

2

Turns out that someone else on my team had set HAYSTACK_DEFAULT_OPERATOR to 'OR' instead of 'AND'. Explains everything - the additional filter tag was actually expanding the number of results!

于 2011-05-13T18:38:25.727 回答
1

You might like to perform search using auto_query():

search_events = SearchQuerySet().models(Event)
                                .auto_query(query)
                                .filter(end_datetime__gte=datetime.now())
                                .order_by("start_datetime")

It has some extra features, like for example exact query searching when phrase is enclosed in quotes.

于 2011-05-13T17:39:45.587 回答