diff --git a/wagtail/wagtailsearch/backends/elasticsearch.py b/wagtail/wagtailsearch/backends/elasticsearch.py index 341cc342e..ae2a07822 100644 --- a/wagtail/wagtailsearch/backends/elasticsearch.py +++ b/wagtail/wagtailsearch/backends/elasticsearch.py @@ -510,12 +510,12 @@ class ElasticSearch(BaseSearch): 'ngram_analyzer': { 'type': 'custom', 'tokenizer': 'lowercase', - 'filter': ['ngram'] + 'filter': ['asciifolding', 'ngram'] }, 'edgengram_analyzer': { 'type': 'custom', 'tokenizer': 'lowercase', - 'filter': ['edgengram'] + 'filter': ['asciifolding', 'edgengram'] } }, 'tokenizer': { diff --git a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py index 3ddce5618..ff200fb70 100644 --- a/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py +++ b/wagtail/wagtailsearch/tests/test_elasticsearch_backend.py @@ -65,6 +65,28 @@ class TestElasticSearchBackend(BackendTests, TestCase): self.assertEqual(len(results), 1) self.assertEqual(results[0].id, obj.id) + def test_ascii_folding(self): + # Reset the index + self.backend.reset_index() + self.backend.add_type(models.SearchTest) + self.backend.add_type(models.SearchTestChild) + + # Add some test data + obj = models.SearchTest() + obj.title = "Ĥéỻø" + obj.live = True + obj.save() + self.backend.add(obj) + + # Refresh the index + self.backend.refresh_index() + + # Search and check + results = self.backend.search("Hello", models.SearchTest.objects.all()) + + self.assertEqual(len(results), 1) + self.assertEqual(results[0].id, obj.id) + class TestElasticSearchQuery(TestCase): def assertDictEqual(self, a, b):