ruby-on-rails - 合并 Elasticsearch 查询和过滤器无法正常工作

标签 ruby-on-rails elasticsearch chewy-gem

我必须合并才能查询和过滤。在合并查询和过滤器之后,我们在 Elasticsearch 2.4 中使用 filter_mode(:must) 做到了这一点。

现在 filter_mode 和 query_mode 不兼容。我正在使用“和”合并查询。我正在使用耐嚼在 Rails 框架中使用 Elasticsearch

query_string = index.query(bool: { should: [{ term: { title: query } }, { term: { tags: query } }] })

domain_filter = index.filter(term: { domain_id: domain_id })

merged_query = query_string.and(domain_filter)

现在 query_string 产品 1 结果。所以过滤器应该产生该结果的一个子集。

相反,当我做 query_string.filter(term: { domain_id: domain_id })
它产生 44 个结果。我的主要目标是合并两个查询以过滤 domain_id 上的结果。当我将 domain_filter 写为查询时,它产生了过滤结果
domain_filter  = index.query(term: { domain_id: domain_id })


merged_query = query_string.and(domain_filter)

上面合并的查询会产生正确的结果。但我认为这样使用它是错误的。我想使用 ES 过滤器。有人可以帮我弄这个吗?

详细查询
使用 query_string.and(domain_filter) 生成
{:index=>["resource_domain"], :type=>["resource_domain"], :body=>{:query=>{:bool=>{:should=>[{:term=>{:title=>"club-4"}}, {:term=>{:tags=>"club-4"}}], :filter=>{:term=>{:domain_id=>6}}}}}}

以上产生了错误的结果

预期的:
{:index=>["resource_domain"], :type=>["resource_domain"], :body=>{:query=>{:bool=>{:must=>[{:bool=>{:should=>[{:term=>{:title=>"club-4"}}, {:term=>{:tags=>"club-4"}}]}}, {:term=>{:domain_id=>6}}]}}}}

最佳答案

您需要将域过滤器插入 bool/filter子句,像这样

query = index.query(bool: { minimum_should_match: 1, should: [{ term: { title: query } }, { term: { tags: query } }], filter: [{term: { domain_id: domain_id }}] })

关于ruby-on-rails - 合并 Elasticsearch 查询和过滤器无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48071761/

相关文章:

elasticsearch - Elasticsearch 5中的词云

ruby-on-rails - 获取以[。]开头或结尾的错误对象字段

ruby-on-rails - 如何使用耐嚼的 gem 使用Elasticsearch滚动API?

ruby-on-rails - Errno::ENOENT: 没有这样的文件或目录@rb_sysopen log/production.log (heroku deploy)

ruby-on-rails - 呈现要发布的评论时出现方法错误

css - 如何在每个 Ruby on Rails 模板集合项之间呈现边框而不是在末尾呈现边框?

scala - 如何为 Spark 结构化流编写 ElasticsearchSink

elasticsearch - spring-data-elasticsearch 和更新

ruby-on-rails - 耐嚼 gem -查询以获取包含特定日期的日期范围

ruby-on-rails - Ruby on Rails bundle 降级