在WhooshAlchemy中,whoosh_search
方法允许你执行文本搜索查询。如果你想要在搜索时使用逻辑“或”(OR)来组合查询词,可以通过设置or_
参数为True
来实现。
默认情况下,whoosh_search
方法会将查询词视为逻辑“和”(AND),这意味着只有当所有查询词都在某个文档中出现时,该文档才会被返回。但是,如果你设置or_=True
,那么只要文档中出现任何一个查询词,它就会被返回。
下面是一个使用or_
参数的例子:
# 假设我们有一个BlogPost模型,并且我们想要搜索标题或内容中包含"cool"或"interesting"的帖子
results = BlogPost.query.whoosh_search('cool OR interesting', or_=True)
在这个例子中,or_=True
参数告诉WhooshAlchemy,对于查询字符串中的每个词(在这个例子中是"cool"和"interesting"),只要文档中至少有一个词出现,就可以将该文档视为匹配。
请注意,whoosh_search
方法的查询字符串应该是一个简单的字符串,它不会像SQL那样解析复杂的查询语法。如果你需要更复杂的查询逻辑,你可能需要构建多个查询并使用Whoosh的高级功能来组合它们。
此外,如果你想要指定特定的字段进行搜索,可以使用fields
参数来指定一个字段的元组或列表。例如:
# 只在标题字段中搜索"cool",并且使用逻辑"或"组合查询词
results = BlogPost.query.whoosh_search('cool', fields=('title',), or_=True)
这样,搜索将只在title
字段中进行,并且只要标题中包含"cool"这个词,就可能返回匹配的结果。
import random
poetry_forms = [u"长相思", u"雨霖铃", u"菩萨蛮", u"醉花阴", u"浣溪沙", u"临江仙", u"水调歌头", u"渔家傲", u"渔歌子",
u"苏幕遮", u"永遇乐", u"虞美人", u"清平乐", u"采桑子", u"鹊桥仙", u"点绛唇", u"相见欢"]
# 随机选择一个词牌名
selected_poetry_form = random.choice(poetry_forms)
selected_poetry_form2 = random.choice(poetry_forms)
poems1 = Poem.query.whoosh_search(selected_poetry_form + " OR " + selected_poetry_form2, limit=100, or_=True)
poems1 = sorted(poems1, key=lambda item: item.view_num, reverse=True)