干草堆更像是忽略过滤器

时间:2013-07-08 23:49:01

标签: django elasticsearch django-haystack

当我在SearchQuerySet上调用more_like_this之前链接过滤器时,似乎根本没有应用过滤器。

from haystack.query import SearchQuerySet as sqs
from articles.models import Article

article = Article.objects.get(pk=4560) # Article instance of one of the many articles I have
sqs().filter(author='testest@testtest.com').count() # 147 - 147 documents with author=testest@testtest.com... so far so good
sqs().more_like_this(article).count() #54893
sqs().filter(author='testest@testtest.com').more_like_this(article).count() # 54893!!!

我假设:

sqs().filter(author='testest@testtest.com').more_like_this(article)

会限制我在147个过滤文档中的MLT搜索,但这几乎就像过滤器被完全忽略一样。

我也尝试颠倒链的顺序:

sqs().more_like_this(article).filter(author='testest@testtest.com')

但最终会返回整个搜索索引

有什么想法吗?提前谢谢。

这是我的article_text.txt

{{ object.title }}
{{ object.body.excerpt|striptags|escape }}

search_index.py

class ArticleIndexes(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True, boost=1.1)
    author = indexes.CharField(model_attr='author')
    site_id = indexes.CharField(model_attr='site_id')
    # non-indexed, stored field
    stored_obj = ArticleStorageField(indexed=False)

1 个答案:

答案 0 :(得分:2)

我很久以前遇到过同样的问题 - 更多像这样的过滤只是在haystacks elasticsearch后端没有实现。 我已经向pyelasticsearch和haystack提出了pull请求以使其工作。 Pyelasticsearch现在允许它,但是haystack仍然没有支持(我已经关闭了我的拉取请求)。

此提交将其修复为haystack: https://github.com/jasisz/django-haystack/commit/76473d8eebf49a0fffba025993a533b852aa8578