Rails 4中的弹性搜索查询字符串

时间:2016-07-11 07:12:22

标签: ruby-on-rails-4 elasticsearch

我在我的应用程序中使用Elasticsearch在表格中的任何位置搜索匹配的单词。

这是我用来获取结果的查询字符串:

search({ query: { prefix: { _all:  keywords }}, sort: [ { start_date: 'asc', start_time: 'asc' } ] })

然后通过以下查询查询所选记录的日期以匹配应用程序中指定的日期范围:

where("status_id= ? and active=? and (((start_date >= ?) and (start_date <= ?))
or ((start_date <= ?) and (? <= end_date)))",2,true,range_start_date,
range_end_date,range_start_date,range_start_date)

但我知道这不是获取结果的好方法。现在我想修改它以从elasticsearch索引中获取所需的数据。

经过长时间的搜索,我找到了&#34; query_string&#34;和&#34; simple_query_string&#34;符合我的要求。但到目前为止我还没有成功获得所需的结果。

如何使用elasticsearch结果附加查询以获取所需的记录? 有人可以帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

最后,我能够自己找到问题的答案。我能够使用&#34;过滤器&#34;根据日期过滤搜索到的内容。关键字。

我将查询修改为:

search_query = {
 query: {
   prefix: { 
     _all:  keywords 
   }
 }, 
 filter: {
   query: {
     query_string: {
       query: "status_id:2 AND active:true AND 
       ((start_date:>=#{range_start_date} AND start_date:<=#{range_end_date}) (start_date:<=#{range_start_date} AND end_date:>=#{range_start_date}))"
     }
   }
 },
 sort: [ { start_date: 'asc', start_time: 'asc' } ] }

最后通过以下方式获取结果:

@result = self.search(search_query)

如果无论如何我可以修改此代码,请建议。谢谢。