带破折号的名称在 django-haystack 中不起作用
Names with dash does not work in django-haystack
我正在开发基于 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 或更大的标记。
例如:如果您 new york 它将标记化并确保您的文档与 ne、new、yo、yor 和 york。 EdgeNGram 字段通常用于自动建议,因为它在查询和索引时间期间将单词标记为此类形式。
您可以将架构更改为 CharField。这样它将 zo-zo 转换为 zo zo 将匹配 Zo-zo on 在你的索引中。
class EventIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
按照您的意愿进行匹配。它只会以这种方式支持精确的单词匹配。
如果您打算保留 EdgeNGram 字段,请创建一个单独的字段。
我正在开发基于 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 或更大的标记。
例如:如果您 new york 它将标记化并确保您的文档与 ne、new、yo、yor 和 york。 EdgeNGram 字段通常用于自动建议,因为它在查询和索引时间期间将单词标记为此类形式。
您可以将架构更改为 CharField。这样它将 zo-zo 转换为 zo zo 将匹配 Zo-zo on 在你的索引中。
class EventIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
按照您的意愿进行匹配。它只会以这种方式支持精确的单词匹配。
如果您打算保留 EdgeNGram 字段,请创建一个单独的字段。