我正在使用带有haystack的elasticsearch。我希望以下列方式获得用户个人资料的搜索结果:
当您搜索" abc"你应该得到有" abc"在他们中。没有其他的。首先查看first_name和last_name,然后查看其他所有内容。因此,第一个结果将是关于那些拥有" abc"以他们的名义,然后" abc"在他们的个人资料中。
当你搜索" abc xyz"时,你应该首先得到" abc xyz" (首先是first_name,然后是last_name,然后是其他所有内容),然后是" abc"或" xyz"在他们中(首先是名字,然后是last_name,然后是其他一切)。
我认为提升会有助于实现这一目标,因此我尝试在现场级别提供提升价值如下,但它没有改变结果。
class ProfileIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(document=True, use_template=True)
first_name = indexes.CharField(null=True, boost=1.5)
last_name = indexes.CharField(null=True, boost=1.125)
valid = indexes.CharField(default=True)
other_fields = ....
我正在使用自动填充执行搜索。例如。
results = SearchQuerySet().models(Profile).filter(SQ(valid="yes")).autocomplete(content=search_keyword.lower())
以下是文档字段的模板:
{{ object.user.first_name }}
{{ object.user.last_name }}
{{ object.title }}
.....
.....
有人可以提出一种方法来实现上述目标吗?
感谢。