当前位置: 代码迷 >> python >> 带破折号的名称在django-haystack中不起作用
  详细解决方案

带破折号的名称在django-haystack中不起作用

热度:64   发布时间:2023-06-13 16:51:24.0

我正在基于django 1.8和搜索引擎django-haystack 2.4.1的应用程序上工作。 一种奇怪的情况是,当我搜索"New York" ,一切正常。 例如,事件名称中有一个奇怪的名称。 "Zo-zo on" (带破折号)搜索未显示正确的结果,仅页面隔离了字母实例,例如: "zo ..."

我做了rebuild_index

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.EdgeNgramField(document=True, use_template=True)
    id = indexes.CharField(model_attr='id')
    get_absolute_url = indexes.CharField(model_attr='get_absolute_url')
    description = indexes.CharField(model_attr='description', null=True)
    is_past = indexes.CharField(model_attr='is_past', default='false')
    date_start = indexes.DateTimeField(model_attr='date_start')

    def get_model(self):
        return Booking

    def index_queryset(self, using=None):
        date_past = now() - timedelta(days=1)
        return self.get_model().published.filter(date_start__gt=date_past).filter(id=7353)

    def read_queryset(self, using=None):
        return self.get_model().all_objects.all()

确定取决于您的搜索索引架构。 您正在使用EdgeNGramField,它将赋予您的所有内容令牌化为大小2及更大的令牌。

例如:如果您是纽约人 ,它将令牌化并确保您的文档与ne,new,yo,yor和york等术语匹配。 EdgeNGram字段通常用于自动建议,因为它在查询和建立索引期间会将单词标记成这种形式。

您可以将架构更改为CharField。 这样,它会ZO-ZO将转化为莫宁莫宁将匹配ZO-ZO在你的索引。

class EventIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)

按照您的意愿进行比赛。 这样只会支持完全匹配的单词。

如果要保留EdgeNGram字段,请创建一个单独的字段。

  相关解决方案