2
我想通過關鍵詞搜索以下Episode
模型。 Episode
有一個多對多的關係_key_words
將一集連接到EpisodeKeyword
。 EpisodeKeyword
代表可以搜索的單詞。該查詢如何按關鍵字匹配的數量進行排序?
class Episode(db.Model):
_key_words = db.relationship('EpisodeKeyword',
secondary = KeywordEpisode,
primaryjoin = _id==KeywordEpisode.c.feed_id,
secondaryjoin = EpisodeKeyword._id==KeywordEpisode.c.keyword_id,
backref = db.backref('episodes', lazy = 'dynamic'),
lazy = 'dynamic')
class EpisodeKeyword(db.Model):
'''
A keyword for an Episode
'''
__table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8mb4'}
DB_MAX_WORD_LENGTH = 30
_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
_word = db.Column(db.String(DB_MAX_WORD_LENGTH), index = True, unique=True)
KeywordEpisode = db.Table('episode_keywords',
db.Column('feed_id', db.Integer, db.ForeignKey('episode._id'),index = True),
db.Column('keyword_id', db.Integer, db.ForeignKey('episode_keyword._id'),index = True)
)
搜索條件拆分得到的關鍵字列表進行搜索:
user_input = 'oct 2014'
search_keywords = ['oct', '2014']
我可以用得到的結果的列表:
results = db.session.query(Episode).filter(EpisodeKeyword._word.in_(words)).join(Episode._key_words).join(Episode).all()
不過,我也想按匹配關鍵字的數量排序結果。例如,如果Episode._key_words同時具有「oct」和「2014」,它應該出現在只有一個關鍵字匹配的項目之前。什麼是將完成這個查詢?