我正在尝试构建一个高级搜索选项(类似于Twitter's)。用户可以在搜索查询中输入包含的单词,排除的单词,包含单词,精确短语等。
我正在使用Searchkick来做到这一点。特殊性Searckick's regexp搜索。
我正在做的是找到那些在口号中加上“Facebook或更少”字样的公司。
Company.search("Be", where: { short_desc: /.*(#{ar}).*/ })
这很有效。但是,我如何对这次搜索做出否定?
做类似Company.search("Be", where: { short_desc: /.*(?!(#{ar})).*/ })
之类的事情并没有产生结果。另外,我可以组合搜索包含要包含的单词和要排除的单词吗?
答案 0 :(得分:3)
这可能对你有所帮助,试试这个:
Business.search("Be", where: { short_desc: {not: /.*(#{ar}).*/} })
检查结果。您可以将其与AND
或OR
运算符结合使用。使用where
子句的任何地方。从gem自述文件中提取:
where: {
expires_at: {gt: Time.now}, # lt, gte, lte also available
orders_count: 1..10, # equivalent to {gte: 1, lte: 10}
aisle_id: [25, 30], # in
store_id: {not: 2}, # not
aisle_id: {not: [25, 30]}, # not in
user_ids: {all: [1, 3]}, # all elements in array
category: /frozen .+/, # regexp
or: [
[{in_stock: true}, {backordered: true}]
]
}
这是你可以将它与查询结合起来的方式。
希望这有帮助。