Django 干草堆 : search for a term with and without accents

标签 django encoding search-engine django-haystack

我正在使用 django haystack 在我的 django 项目中实现一个搜索系统。问题是我的模型中的某些字段有一些法语口音,我想找到包含和不带口音的查询内容的条目。

我认为最好的想法是创建一个 SearchIndex ,其中包含带重音的字段和不带重音的同一个字段。

对此有任何想法或提示吗?

这是一些代码

想象一下以下模型:

Cars(models.Model):
    name = models.CharField()

以及以下干草堆索引:
Cars(indexes.SearchIndex):
    name = indexes.CharField(model_attr='name')
    cleaned_name = indexes.CharField(model_attr='name')

    def prepare_cleaned_name(self, object):
        return strip_accents(object.name)

现在,在我的索引模板中,我放置了两个字段:
{{ object.cleaned_name }}
{{ object.name }}

所以,这是一些伪代码,我不知道它是否有效,但是如果您对此有任何想法,请告诉我!

最佳答案

我找到了一种方法来索引来自模型中同一字段的两个值。

首先,在您的模型中编写一个方法,该方法返回字段的 ascii 值:

class Car(models.Model):
    name = model.CharField()

    def ascii_name(self):
        return strip_accents(self.name)

因此,在用于生成索引的模板中,您可以执行以下操作:
{{ object.name }}
{{ object.ascii_name }}

然后,你只需要重建你的索引!

关于 Django 干草堆 : search for a term with and without accents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240880/

相关文章:

java - 比 Base64 更短的编码

haskell - Haskell 中的 EAN13 条码编码 : How to test it?

java - 如何在SOLR中管理两个不同的实体?

spring - 搜索查询的缓存策略是什么

python - Django Form提交导致404错误

javascript - 以正确的方式使用javascript将动态表单添加到django formset

python - Django 原子增加初始值

django - 使用 sqlite 进行 django 单元测试时出现这种副作用的原因是什么?

Emacs dired+tramp,UTF8 错误的文件名

java - 如何在 Lucene 3.0.1 中索引 BigDecimal 值