0

我使用了 gem elasticsearch-rails 和 elasticsearch-model,我很难在 elasticsearch-rails 中编写这个查询。

SELECT "news".* FROM "news" 
WHERE "news"."is_active" = 'true' AND 
  ((priority is not null AND created_at > '2014-07-08 08:55:52.888587') OR 
   (created_at > '2014-07-08 08:55:52.888820' AND is_persisted = 't') ) 
ORDER BY "news"."priority" ASC, "news"."created_at" DESC 
LIMIT 10 OFFSET 0

在我之前的项目中,我使用了“轮胎模型”,我使用了这样的东西: filter :bool, must: {and: [{term: {field with options}}, {term: {field with options}}]},它适用于轮胎模型

但是如果我在 elasticsearch-rails 中使用这样的东西,它会抛出丢失的过滤错误我写这样的东西来过滤活动记录:

def self.news_index(page = 1)
  query =:
  response=self.elasticsearch.search query: { match: { is_active: true }}
  response=response.page(page)
end

在上述方法中,我想添加带有 bool 选项的组合过滤器。谁能指导我?

4

1 回答 1

0

在查询方面,Elasticsearch-ruby 更接近于 elasticsearch DSL。大多数时候,您会将散列(或类似散列的对象)传递给查询方法。

这样的事情应该让你接近:

self.search query: {
  filtered: {
    query: { match: { is_active: true }},
    filter: { 
      bool: {
        must: { 
          and: [{term: {field with options}}, {term: {field with options}}]
        }
      }
    } 
  }
}

不同之处在于,它不是filter在轮胎查询中使用参数:bool和过滤器的方法调用。您现在需要指定一个:filter带有哈希值的键,然后该:bool键包含一个以现有过滤器作为值的键。

于 2014-08-12T08:57:01.103 回答