Po raz pierwszy na stronie, więc cześć wszystkim i dziękuję z góry. Długoletni czający i nowicjusz.Flask-Sqlalchemy + Sqlalchemy-searchable powracająca pusta lista
Pracuję nad aplikacją internetową w kolbie, używając Flask-SqlAlchemy i SqlAlchemy-Searchable (docs->https://sqlalchemy-searchable.readthedocs.org/en/latest/index.html). Z jakiegoś powodu nie mogę dowiedzieć się, kiedy próbuję się podobny przykład z kodem podanym na stronie docs:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy, BaseQuery
from sqlalchemy_searchable import SearchQueryMixin
from sqlalchemy_utils.types import TSVectorType
from sqlalchemy_searchable import make_searchable
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://usr:[email protected]/dev'
app.config['SECRET_KEY'] = 'notreallyasecret'
db = SQLAlchemy(app)
make_searchable()
class ArticleQuery(BaseQuery, SearchQueryMixin):
pass
class Article(db.Model):
query_class = ArticleQuery
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(255))
content = db.Column(db.UnicodeText)
search_vector = db.Column(TSVectorType('name', 'content'))
Moi zapytań nie działają prawidłowo. Otworzyłem powłokę Pythona i utworzyłem bazę danych, a następnie wstawiłem pięć identycznych artykułów o nazwie "finlandia" zarówno jako nazwę, jak i treść. Zgodnie z przykładem:
Article.query.search(u'finland').limit(5).all()
Powinny być zwrócone artykuły, które mają gdzieś finland. W moim przypadku otrzymuję pustą listę. Otrzymuję obiekt z powrotem, jeśli zmienię przykładowe zapytanie na:
Article.query.search(' ').first()
Ale raczej bezużyteczne jest poszukiwanie pustych miejsc. Jakieś pomysły?
Dodając nieco więcej: zauważyłem w tabeli artykułów, kolumna "search_vector tsvector" jest całkowicie pusta, mimo że dane znajdują się w kolumnach zawartości i nazwy; Nie jestem pewien, czy to ma coś z tym wspólnego.
Nienawidzę zadać oczywiste pytanie ... ale czy jesteś pewien, że to "Finlandia" w danych? Wydaje mi się, że w wyszukiwaniu sqlalchemy rozróżniana jest wielkość liter ... może twoje dane mają "Finlandię", ale nie "Finlandię"? – dylrei
Prawidłowo poprawne pytanie. Tak, jestem pewien, że są takie same. Zrobiłem kilka więcej nagrań, a ich nazwa i treść to "ciasto". Edytowałem oryginał, aby zrobić finland we wszystkich małych literach. – Vyndion
Wygląda na to, że nie powinieneś niczego odzyskiwać szukając spacji. Czy odzyskasz 5 "finlandzkich" rekordów, które wprowadziłeś, wykonując 'Article.query.search ('') .all()'? – dylrei