私は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を初めて使いました。もし私が本当に基本的なことをしていないのであれば、事前にお詫び申し上げます。