added multi-language support to FTS

This commit is contained in:
smilerz
2021-04-11 20:17:54 -05:00
parent f9f8dbd64a
commit 13b5827cb2
2 changed files with 24 additions and 7 deletions

View File

@ -3,22 +3,36 @@ from django.contrib.postgres.search import (
SearchQuery, SearchRank, SearchVector, TrigramSimilarity,
)
from django.db import models
from django.utils import translation
DICTIONARY = {
# TODO find custom dictionaries - maybe from here https://www.postgresql.org/message-id/CAF4Au4x6X_wSXFwsQYE8q5o0aQZANrvYjZJ8uOnsiHDnOVPPEg%40mail.gmail.com
# 'hy': 'Armenian',
# 'ca': 'Catalan',
# 'cs': 'Czech',
'nl': 'dutch',
'en': 'english',
'fr': 'french',
'de': 'german',
'it': 'italian',
# 'lv': 'Latvian',
'es': 'spanish',
}
# TODO add search highlighting
# TODO add language support
# TODO add schedule index rebuild
# TODO add admin function to rebuild index
class RecipeSearchManager(models.Manager):
def search(self, search_text, space):
language = DICTIONARY.get(translation.get_language(), 'simple')
search_query = SearchQuery(
search_text, config='english'
search_text, config=language
)
search_vectors = (
SearchVector('search_vector')
+ SearchVector(StringAgg('steps__ingredients__food__name', delimiter=' '), weight='B', config='english')
+ SearchVector(StringAgg('keywords__name', delimiter=' '), weight='B', config='english'))
+ SearchVector(StringAgg('steps__ingredients__food__name', delimiter=' '), weight='B', config=language)
+ SearchVector(StringAgg('keywords__name', delimiter=' '), weight='B', config=language))
search_rank = SearchRank(search_vectors, search_query)
# the results from trigram were really, really bad
# trigram = (