只使用Django Haystack在查询中匹配一些单词

我目前使用下面的django-haystack代码在我的网站上进行搜索:

def products_search_results(request):
    q = request.GET['q']
    from haystack.query import SearchQuerySet
    products = SearchQuerySet().models(Product).filter(text=q)

这在搜索中使用q作为查询参数。 这也是使用q中的所有单词来匹配结果。 这可能是(?)预期的默认行为。 这是我所看到的。

我有一个Product与“红色克尔维特”的称号。

当然,搜索词“红色”,“红色克尔维特”和“克尔维特”全部匹配,但术语“红色克尔维特敞篷车”或“红色克尔维特T顶部”将不匹配。 我真的很喜欢那些匹配查询,特别是如果没有多少结果的默认查询。

有没有事情可以用我的干草堆查询来获得这种行为?


例如在您的搜索索引文件中使用EdgeNgramField

class AppIndex(indexes.SearchIndex, indexes.Indexable):

    ngram_text = indexes.EdgeNgramField()

    def prepare(self, obj):
        """Add the content of text field from final prepared data into ngram_text field
        """
        prepared_data = super(AppIndex, self).prepare(obj)
        prepared_data['ngram_text'] = prepared_data['text']
        return prepared_data

然后查询该字段(确保在进行上述更改后首先执行rebuild_indexupdate_index ):

products = SearchQuerySet().models(Product).filter(ngram_text=q)
链接地址: http://www.djcxy.com/p/38693.html

上一篇: Matching only some words in query using Django Haystack

下一篇: iregex to match complete word only