간단하고 데이터베이스에 독립적 인 솔루션은 악센트가있는 필드를 두 번, 악센트가없는 한 번, 한 번만 쓸 수 있도록 작성하는 것입니다. 그런 다음 액센트가없는 버전에 대한 검색을 수행 할 수 있습니다.
문자열의 액센트없는 vesherion을 생성하려면 Unidecode을 사용할 수 있습니다.
레코드가 삽입되거나 업데이트 될 때 데이터베이스에 액센트없는 버전을 자동으로 지정하려면 Column
정의에 default
및 onupdate
절을 사용할 수 있습니다. 즉, 검색이 이루어집니다되는 일이기 때문에, 나는 단지 악센트가없는 필드 색인 방법
from unidecode import unidecode
def unaccent(context):
return unidecode(context.current_parameters['some_string'])
class MyModel(db.Model):
id = Column(db.Integer, primary_key=True)
some_string = db.Column(db.String(128))
some_string_unaccented = db.Column(db.String(128), default=unaccent, onupdate=unaccent, index=True)
참고 : 예를 들어, 플라스크-SQLAlchemy의를 사용하여 당신이 뭔가를 할 수 있습니다.
물론 검색하기 전에 검색하려는 값을 unaccent로 가져와야합니다. 예를 들어 : 필요한 경우
def search(text):
return MyModel.query.filter_by(some_string_unaccented = unaccent(text)).all()
당신은 전체 텍스트 검색에 동일한 기술을 적용 할 수 있습니다.
효과가있었습니다! 아래에 Miguel이 제안한 검색 문자열에서 유니 코드를 사용해야했습니다. 그것은'session.query (Place) .filter ((unaccent (Place.name) .ilike (string)))'와 같은 것을 알게되었습니다. 또한 대소 문자를 무시합니다. 고마워요! – guinunez