2017-07-10 4 views
1

私はelasticsearchでdjango haystackを実装しようとしているdjangoアプリ(ブログ)を持っています。私が抱えている問題は、<p>または<html>を検索して検索機能をテストすると、結果が期待できないと思いますが、すべての投稿が返されます。ここに私のアプリ/モデルがどのように見えるかです:htmlタグを検索するDjango haystackはすべての投稿を返します

ブログ/ models.pyが

class Posts(models.Model): 
    title = models.CharField(max_length=200, unique=True) 
    html_content = models.TextField(blank=True, null=True) 
    markdown_content = models.TextField(blank=True, null=True) 
    date_created = models.DateTimeField(auto_now=False, auto_now_add=True) 
    last_updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    tags = models.ManyToManyField(Tag, through='PostTags') 

    def save(self, *args, **kwargs): 
     self.html_content = markdown.markdown(
      self.markdown_content, 
      ["markdown.extensions.extra", "codehilite"] 
     ) 
     super(Posts, self).save(*args, **kwargs 

ブログ/ search_indexes.pyが

from haystack import indexes 


from .models import Posts 


class PostsIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(
     model_attr='text', 
     document=True, 
     use_template=True 
    ) 
    title = indexes.CharField(model_attr='title') 
    markdown_content = indexes.CharField(
     model_attr='markdown_content', 
     null=True, 
     indexed=False 
    ) 

    html_content = indexes.CharField(
     model_attr='html_content', 
     null=True, 
     indexed=False 
    ) 

    def get_model(self): 
     return Posts 

    def index_queryset(self, using=None): 
     return self.get_model().objects.all() 

今、私は私が<p>または<html>を検索するときであることを前提としていデータベースにHTMLタグを保存しているため、すべての投稿を返すのですが、間違っていますか?もしそうなら、どのようにhtmlタグを無視するように指定できますか?

indexes.ModelSearchIndexを使用して、フィールドhtml_contentを除外してみましたが、まだHTMLタグを検索するとすべての投稿が返されているようです。

私はdjango-haystackとelasticsearchを初めて使いました。もし私が本当に基本的なことをしていないのであれば、事前にお詫び申し上げます。

答えて

0

インデックス条件(PostsIndex)を変更しているにもかかわらず、以前に作成したインデックス(まだHTMLタグがあるインデックス)で検索を実行していると思われます。 Haystackのrebuild_index management commandを実行してみてください。この動作に満足するまで、索引構成を変更するたびにこれを行います。

もう1つの可能性は、検索クエリで<>のようなメタ文字を無視するように設定されているため、予想よりも多くの結果を生成している可能性があります。

関連する問題