Searchkick和正则表达式

时间:2015-08-05 05:51:08

标签: ruby-on-rails regex elasticsearch searchkick

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

我正在使用Searchkick来做到这一点。特殊性Searckick's regexp搜索。

我正在做的是找到那些在口号中加上“Facebook或更少”字样的公司。

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

这很有效。但是,我如何对这次搜索做出否定?

做类似Company.search("Be", where: { short_desc: /.*(?!(#{ar})).*/ })之类的事情并没有产生结果。另外,我可以组合搜索包含要包含的单词和要排除的单词吗? Searchkick Example

1 个答案:

答案 0 :(得分: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}]
  ]
}

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

希望这有帮助。