- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在查看关于 multiple indexes 的 Haystack 文档,但我不知道到底如何使用它们。
此示例中的主要模型是Proposal
。我想要有两个返回提案列表的搜索索引:一个仅在提案本身中搜索,另一个在提案及其评论中搜索。我已经像这样设置了 search_indexes.py
:
class ProposalIndexBase(indexes.SearchIndex, indexes.Indexable)
title = indexes.CharField(model_attr="title", boost=1.1)
text = indexes.NgramField(document=True, use_template=True)
date = indexes.DateTimeField(model_attr='createdAt')
def get_model(self):
return Proposal
class ProposalIndex(ProposalIndexBase):
comments = indexes.MultiValueField()
def prepare_comments(self, object):
return [comment.text for comment in object.comments.all()]
class SimilarProposalIndex(ProposalIndexBase):
pass
这是我在 views.py
中的搜索:
def search(request):
if request.method == "GET":
if "q" in request.GET:
query = str(request.GET.get("q"))
results = SearchQuerySet().all().filter(content=query)
return render(request, "search/search.html", {"results": results})
如何设置一个单独的 View 来从特定索引获取 SearchQuerySet?
最佳答案
Haystack(和其他自动生成的)文档并不是一个清晰的好例子,它就像阅读电话簿一样令人兴奋。我认为您提到的“多个索引”部分实际上是关于访问不同的后端搜索引擎(如 whoosh、solr 等)进行查询。
但是您的问题似乎是关于如何查询不同模型的“SearchIndexes”。在您的示例中,如果我正确理解您的问题,您希望有一个针对“提案”的搜索查询,另一个针对“提案”+“评论”的搜索查询。
我想你想看看 SearchQuerySet API ,它描述了如何过滤搜索返回的查询集。有一个方法叫models它允许您提供模型类或模型类列表来限制查询集结果。
例如,在您的搜索 View 中,您可能希望有一个查询字符串参数,例如“内容”,该参数指定搜索是针对“提案”还是针对“所有内容”(提案和评论)。因此,您的前端需要在调用 View 时提供额外的 content 参数(或者您可以为不同的搜索使用单独的 View )。
您的查询字符串需要类似于:
/search/?q=python&content=proposal
/search/?q=python&content=everything
您的 View 应该解析 content 查询字符串参数以获取用于过滤搜索查询结果的模型:
# import your model classes so you can use them in your search view
# (I'm just guessing these are what they are called in your project)
from proposals.models import Proposal
from comments.models import Comment
def search(request):
results = None
if request.method == "GET":
if "q" in request.GET:
query = str(request.GET.get("q"))
# Add extra code here to parse the "content" query string parameter...
# * Get content type to search for
content_type = request.GET.get("content")
# * Assign the model or models to a list for the "models" call
search_models = []
if content_type is "proposal":
search_models = [Proposal]
elif content_type is "everything":
search_models = [Proposal, Comment]
# * Add a "models" call to limit the search results to the particular models
results = SearchQuerySet().all().filter(content=query).models(*search_models)
return render(request, "search/search.html", {"results": results})
如果您有大量搜索索引(即来自多个模型的大量内容),您可能不想在 View 中对模型进行硬编码,而是使用 django 中的 get_model 函数.db动态获取模型类。
关于Django-haystack:如何选择在 SearchQuerySet 中使用哪个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945161/
我在延迟的文件中转储了一些Django查询,因此我将参数sql_with_params传递给以后在延迟的raw查询中执行。 我已经将所有查询迁移到了haystack,所以我不想对SearchQuery
我正在将Haystack与ElasticSearch一起使用,以搜索我网站上用户的文档。用户彼此“关注”,我希望我关注的用户的匹配文档在其他用户的匹配文档之前显示。在每个类别中,我想根据默认分数将排序
如何通过相关模型字段过滤/加入 Haystack SearchQuerySet? 我有这样的查询: sqs = SearchQuerySet().models(models.Person) 这会返回与
我有一个使用 SOLR 进行索引的 Django 项目。 我正在尝试做一个 子串搜索使用 Haystack 的 搜索查询集 类(class)。 例如,当用户搜索词条 时“耳朵” ,它应该返回具有以下值
我有一个非常通用的 View /模板来显示给定模型的查询集的内容。 我在 12 个地方使用了 12 个不同的查询集,现在我想将 haystack 搜索集成到那里,但我不能,因为 SearchQuery
我一直在查看关于 multiple indexes 的 Haystack 文档,但我不知道到底如何使用它们。 此示例中的主要模型是Proposal。我想要有两个返回提案列表的搜索索引:一个仅在提案本身
所以我有一个类似的模型: class Whatever(SlugMixin, models.Model): user = models.ForeignKey(auth_models.User,
我正在尝试序列化 haystack 结果, api.py class PinSearchViewSet(viewsets.ReadOnlyModelViewSet): http_method_
我正在尝试在我的 Django 应用程序中使用 django-haystack + whoosh。我的索引类看起来像这样 class ArticleIndex(indexes.SearchIndex,
我有一个带有 ImageField 的模型,我正在为使用 Django Haystack 的搜索建立索引,我想在我的搜索结果中使用这些图像。如果我错了请纠正我,但您不能在 Django Haystac
我有以下模型: class EquipmentModel(models.Model): name = models.CharField(max_length=64, blank=False)
这是我要搜索的模型 class itemType(models.Model): partNumber = models.CharField(max_length = 12, null = True
我正在尝试获取 10 个对象,例如: q_auth = SearchQuerySet().filter(content=validate_query) q_auth = q_auth[:10] pri
我在 search_indexes.py 中有 3 个模型和 3 个索引,例如 (Modelname1Index, ModelName2Index, Modelname3Index)。 SearchQ
我需要返回 SearchQuerySet 中的所有条目,其中某个 CharField 为空,即空字符串。 在我的 search_indexes.py 中我有: sometext = indexes.C
我将 Django 1.5.1 与 django-haystack 2.1.0 和 whoosh 2.5.2 后端一起使用: 模型.py: GENDER_CHOICES = ( (u'M',
我需要将 SearchQuerySet() (django-haystack) 对象转换为 objects.filter 返回的类型。然后我需要能够过滤它。 例如,如果有一个带有 Restaurant
有什么办法可以得到两个或多个 searchqueryset 的并集吗?例如:- query1 = SearchQuerySet().filter(authors=query) query2 = Sea
这让我有点生气,但看起来应该很简单。 我正在使用 Django 和 Haystack,并且有一个搜索索引,其中包括一个允许 null 的 IntegerField。这是基于 Django 中的相关模型
我是一名优秀的程序员,十分优秀!