1

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)

私の MLT 検索を 147 のフィルターされたドキュメント内に制限しますが、まるでフィルターが完全に無視されているかのようです。

また、チェーンの順序を逆にしてみました:

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)
4

1 に答える 1

2

私はずっと前に同じ問題に遭遇しました.このようなフィルタリングは、ヘイスタックのelasticsearchバックエンドに実装されていません. pyelasticsearch と haystack の両方にプル リクエストを送信して動作させました。Pyelasticsearch は現在それを許可していますが、haystack はまだサポートしていません (そして、プル リクエストをクローズしました)。

このコミットはヘイスタックでそれを修正します: https://github.com/jasisz/django-haystack/commit/76473d8eebf49a0fffba025993a533b852aa8578

于 2013-07-09T20:05:15.123 に答える