我正在使用django haystack的完全匹配(使用Whoosh)来过滤并获得意想不到的结果。
search_index.py
class AssetIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
asset_type = indexes.CharField(model_attr='asset_type')
brand = indexes.CharField(model_attr='brand')
def prepare_brand(self, obj):
return obj.brand.name
def index_queryset(self, using=None):
"""Used when the entire index for model is updated."""
return self.get_model().objects.filter(created_on__lte=datetime.datetime.now())
views.py
assets = SearchQuerySet().models(Asset)
assets = assets.filter(
content=query, asset_type=Exact('brand_asset'))
assets = assets.filter(brand=Exact(b.name))
我希望以上搜索方式如下:按query
搜索,asset_type
等于brand_asset
,brand
为b.name
。所以一切都和你在一起。
实际上brand
并不准确。如果我选择Kraft或Kraft Mac n Cheese,我会得到相同的结果,即使这是两个不同的品牌。
TLDR - 我的搜索不仅限于搜索索引文件中的brand
字段。
我也可以使用Elasticsearch获得相同的结果。