In case its useful to anyone else, I have got around this with an
extra boolean field in the SearchIndex. The searchindex can get a
prepare_FIELDNAME method, which I then used to set this field to True
or False based on the type of page. After this,
haystack.views.basic_search almost does the job of searching, just
adding a filter(is_kb="True") to the results here gives me the items I
want (or False for excluding them). I copied basic_search into
localsite.views, edited to change this filter, and everything seems to
work well.
The only change to pages is the searchindex to add this field - I
thought about unregistering this in my local app, then reregistering,
but was worried about timing - would it be possible for my call to
unregister to happen before the pages searchindex is registered?