3

我正在尝试构建一个高级搜索选项(类似于Twitter 的)。用户可以在搜索查询中输入包含的单词、排除的单词、包含的单词、确切的短语等。推特高级搜索

我正在使用 Searchkick 来执行此操作。特殊性Searckick 的正则表达式搜索。

以下是我正在做的寻找标语中包含“Facebook 或更少”字样的公司。

Company.search("Be", where: { short_desc: /.*(#{ar}).*/ })

这很好用。但是,我该如何否定这个搜索呢?

做类似的事情Company.search("Be", where: { short_desc: /.*(?!(#{ar})).*/ })不会产生结果。另外,我可以将包含要包含的单词和要排除的单词的搜索结合起来吗? 搜索踢示例

4

1 回答 1

3

可能对你有帮助,试试这个:

Business.search("Be", where: { short_desc: {not: /.*(#{ar}).*/} })

并检查结果。您可以将其与ANDOR运算符结合使用。使用该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}]
  ]
}

这就是您可以将它与查询结合起来的方式。

希望这可以帮助。

于 2015-08-05T06:04:46.813 回答