【发布时间】:2016-06-08 15:22:19
【问题描述】:
我正在使用 haystack 和弹性搜索来搜索项目,但我得到的分数没有意义(对我来说)。
我尝试索引和搜索的模型类似于:
class Car(models.Model):
name = models.CharField(max_length=255)
class Color(models.Model):
car = models.ForeignKey(Car)
name = models.CharField(max_length=255)
还有搜索索引,即使我对汽车感兴趣,我也想按颜色搜索它们,因为我想专门显示该颜色的图片:
class CarIndex(indexes.SearchIndex, indexes.Indexable):
text = CharField(document=True)
def get_model(self):
return Color
def prepare_text(self, obj):
# Some cleaning
return " ".join([obj.name, obj.car.name])
现在我添加了三种颜色的汽车,即红色、黑色和白色的 LaFerrari。只有一种型号的汽车,用于搜索的有 3 辆汽车。
所以我检查了 Kibana,我得到了正常的输出。
然后我执行正常搜索:LaFerrari
所有三个模型都有相同的信息,仅更改文本字段上的颜色名称。我什至尝试从文本中删除颜色,猜猜我得到了什么。
在这次惨败之后,我尝试了python elasticsearch库,结果正常(手动索引和搜索),如果我搜索LaFerrari,所有三种颜色的分数都是一样的。
知道发生了什么吗?
我正在考虑从 haystack 迁移到普通的 elasticsearch,有什么建议吗?
【问题讨论】:
-
这是错字吗?
def get_model(self): return Color- 这不应该是return Car吗? -
@Risadinha 这不是错字,我想按颜色索引,有点混乱,但对于我想要的搜索模型,可以。
-
是的,我意识到你所称的
Color是Car,而你所称的Car类似于Brand。最重要的是,您将索引命名为CarIndex,这使得它更加混乱。
标签: django elasticsearch django-haystack