ruby-on-rails - Elasticsearch query_string多值字段

标签 ruby-on-rails elasticsearch elasticsearch-rails

我在我的 Ruby on Rails 项目的1个中使用 ElasticSearch 。对于ElasticSearch,我大量使用 query_string

以下是我的项目设置:

Ruby-2.2.4,Rails-4.2.0,ElasticSearch-Model-0.1.8

我已经索引了数据。使用 Article.import

现在,在控制台中,我正在获取所有已发布的文章数,正在使用:

Article.search(query: { query_string: { query: {"status:1"} } })

这很棒!现在,我想通过 user_ids 查找文章

上面的SQL就像魅力一样工作!
SELECT * FROM articles WHERE articles.user_id IN (5, 10)

但是,当我尝试对 query_string 使用相同的概念时,它不起作用!
Article.search(query: { query_string: { query: "status:1 AND user_id:[5, 10]" } })

这给了我结果:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":"SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[mUk_rhx-RP6G5sJRMpfDwg][articles][0]: SearchParseException[[articles][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"status:1 AND user_id:[5,10]\"}}}]]]; nested: QueryParsingException[[articles] Failed to parse query [status:1 AND user_id:[5,10]]]; nested: ParseException[Cannot parse 'status:1 AND user_id:[5,10]': Encountered \" \"]\" \"] \"\" at line 1, column 98.\nWas expecting one of:\n    \"TO\" ...\n    <RANGE_QUOTED> ...\n    <RANGE_GOOP> ...\n    ];

请帮助我了解完成这项工作到底需要做什么!我对此进行了很多搜索,发现了多个选项,例如RANGE,TO等,但是没有一个:(

希望早日收到你的消息!

最佳答案

在这种情况下,您不应使用query_string。请改用terms query。要合并多个查询,请使用bool

{
"query": {
  "bool": {
     "must": [
        {
           "term": {
              "status": 1
           }
        },
        {
           "terms": {
              "user_id": [
                 5,
                 10
              ]
           }
        }
       ]
     }
    }
  }

关于ruby-on-rails - Elasticsearch query_string多值字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35745483/

相关文章:

ruby-on-rails - 无法在 Rails Controller 中实现删除

ruby-on-rails - 如何简化 Rails 中的大型 respond_to block

amazon-web-services - 使用 aws cli 将日志流式传输到 elastic

elasticsearch - 如何在Elasticsearch中索引Twitter数据?

elasticsearch - 从/usr/local/var卸载elasticsearch并在MacOSX上安装另一个版本

ruby-on-rails - ElasticSearch-传递术语数组进行过滤

ruby-on-rails - Ruby 2.1.0/2.1.1/2.1.2 不支持调试器 gem

ruby-on-rails - 使用 Mongoid (MongoDB)、Redis、Resque、Capistrano 等部署 Ruby on Rails 应用程序

elasticsearch - Elasticsearch Nest和CopyTo

ruby-on-rails - Elasticsearch 6.3.2术语匹配空数组 “plus”其他