如何通过关键字匹配数对查询进行排序?

矽鹰

我想Episode通过关键字搜索以下模型。Episode具有将多_key_words集链接到的多对多关系EpisodeKeywordEpisodeKeyword表示可以搜索的单词。

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”,则它应位于仅匹配一个关键字的项目之前。什么查询将完成此任务?

大卫主义

使用子查询来过滤和计数关键字,然后将其加入最终查询。

# split the query into a list
search = 'oct 2014'
words = search.strip().split()

# use an unnest subquery instead of directly passing the list to in_
# this is for performance reasons for large lists of keywords
words_tab = db.session.query(db.func.unnest(words).label('word')).subquery()

# count the words that match for each episode as a subquery
# this also does the filtering since we're doing the join here
words_q = db.session.query(
    Episode.id,
    db.func.count(Episode.id).label('words')
).join(Episode._key_words
).filter(EpisodeKeyword._word.in_(words_tab)
).group_by(Episode.id
).subquery()

# join on the word query and order by its counts
results = Episode.query.join(
    (words_q, words_q.c.id == Episode.id)
).order_by(words_q.c.words.desc()
).all()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过关键字对单元格进行分类

来自分类Dev

通过关键字对单元格进行分类

来自分类Dev

通过关键字提取

来自分类Dev

如何针对关键字数组搜索字符串并根据sql中的匹配数对结果进行排序?

来自分类Dev

通过关键字在Django多对多中查询模型继承中的父级

来自分类Dev

通过关键字在Django多对多中查询模型继承中的父级

来自分类Dev

通过关键字对字典进行分组并找到最大值

来自分类Dev

通过关键字而不是数字的ASCII值进行凯撒密码移位

来自分类Dev

使用Google App Engine或Lucene通过关键字映射进行搜索

来自分类Dev

通过关键字而不是数字的ASCII值进行凯撒密码移位

来自分类Dev

如何通过指定关键字对pandas数据框中的列名进行排序

来自分类Dev

如何使用LoDash通过关键字过滤对象数组?

来自分类Dev

如何通过关键字识别相似的字符串

来自分类Dev

通过关键字选择JS搜索

来自分类Dev

通过关键字搜索Mongoid哈希字段

来自分类Dev

Twilio-AvailablePhoneNumbers通过关键字搜索

来自分类Dev

通过关键字搜索网站内的网页

来自分类Dev

如何将关键字与SQL查询匹配?

来自分类Dev

如何首先根据关键字排序?

来自分类Dev

查询解析数据库,通过匹配关键字忽略其大小写返回

来自分类Dev

MySQL匹配查询-在结果中显示匹配的关键字

来自分类Dev

通过搜索关键字跨多个顶点属性进行Gremlin查询搜索

来自分类Dev

youtube api v3通过关键字javascript搜索

来自分类Dev

长生不老药通过关键字获取列表元素

来自分类Dev

JW Platform-通过关键字获取我的播放列表(频道)列表

来自分类Dev

通过关键字将这样的文本子集化的最佳方法是什么?

来自分类Dev

Laravel 搜索功能通过关键字过滤外键数据

来自分类Dev

如何对在 Django 中使用关键字搜索后显示的对象结果进行排序

来自分类Dev

当关键字通过python匹配两行时,如何拆分第二行?

Related 相关文章

  1. 1

    通过关键字对单元格进行分类

  2. 2

    通过关键字对单元格进行分类

  3. 3

    通过关键字提取

  4. 4

    如何针对关键字数组搜索字符串并根据sql中的匹配数对结果进行排序?

  5. 5

    通过关键字在Django多对多中查询模型继承中的父级

  6. 6

    通过关键字在Django多对多中查询模型继承中的父级

  7. 7

    通过关键字对字典进行分组并找到最大值

  8. 8

    通过关键字而不是数字的ASCII值进行凯撒密码移位

  9. 9

    使用Google App Engine或Lucene通过关键字映射进行搜索

  10. 10

    通过关键字而不是数字的ASCII值进行凯撒密码移位

  11. 11

    如何通过指定关键字对pandas数据框中的列名进行排序

  12. 12

    如何使用LoDash通过关键字过滤对象数组?

  13. 13

    如何通过关键字识别相似的字符串

  14. 14

    通过关键字选择JS搜索

  15. 15

    通过关键字搜索Mongoid哈希字段

  16. 16

    Twilio-AvailablePhoneNumbers通过关键字搜索

  17. 17

    通过关键字搜索网站内的网页

  18. 18

    如何将关键字与SQL查询匹配?

  19. 19

    如何首先根据关键字排序?

  20. 20

    查询解析数据库,通过匹配关键字忽略其大小写返回

  21. 21

    MySQL匹配查询-在结果中显示匹配的关键字

  22. 22

    通过搜索关键字跨多个顶点属性进行Gremlin查询搜索

  23. 23

    youtube api v3通过关键字javascript搜索

  24. 24

    长生不老药通过关键字获取列表元素

  25. 25

    JW Platform-通过关键字获取我的播放列表(频道)列表

  26. 26

    通过关键字将这样的文本子集化的最佳方法是什么?

  27. 27

    Laravel 搜索功能通过关键字过滤外键数据

  28. 28

    如何对在 Django 中使用关键字搜索后显示的对象结果进行排序

  29. 29

    当关键字通过python匹配两行时,如何拆分第二行?

热门标签

归档