djangoencodingsearch-enginedjango-haystack

Django Haystack : search for a term with and without accents


I'm implementing a search system onto my django project, using django haystack. The problem is that some fields in my models have some french accents, and I would like to find the entries which contents the query with and without accents.

I think the best Idea is to create a SearchIndex with both the fields with the accents, and the same field without the accents.

Any idea or hint on this ?

Here is some code

Imagine the following models :

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

and the following Haystack Index:

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)

now, in my index template, I put the both fields :

{{ object.cleaned_name }}
{{ object.name }}

So, thats some pseudo code, I don't know if it works, but if you have any idea on this, let me know !


Solution

  • I find a way to index both value from the same field in my Model.

    First, write a method in your model which returns the ascii value of the fields:

    class Car(models.Model):
        name = model.CharField()
    
        def ascii_name(self):
            return strip_accents(self.name)
    

    So that in your template used to generate the index, you could do this:

    {{ object.name }}
    {{ object.ascii_name }}
    

    Then, you just have to rebuild your indexes !