Elasticsearch query_string 个多值字段
Elasticsearch query_string multivalue fields
我在 Rails 项目的 Ruby 之一中使用 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
]
}
}
]
}
}
}
我在 Rails 项目的 Ruby 之一中使用 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
]
}
}
]
}
}
}