我有一个django应用程序(博客)我试图用elasticsearch实现django haystack。我遇到的问题是,在通过搜索<p>
或<html>
来测试搜索功能时,我不希望有任何结果,但它会返回我的所有帖子。这是我的应用程序/模型的样子:
博客/ 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 :(得分:0)
我怀疑问题是您正在修改索引条件(在PostsIndex
中),但您仍在对先前创建的索引执行搜索,该索引仍然具有HTML标记。尝试运行Haystack的rebuild_index
management command。在对索引配置进行每次更改之后执行此操作,直到您对该行为感到满意为止。
另一种可能性是Elasticsearch配置为忽略搜索查询中的<
和>
等元字符,因此产生的结果超出预期。