ich benutze ElastischeSuche in 1 von meinen Ruby auf Schienen Projekt. Für ElasticSearch verwende ich viel query_string
Unten sind meine Projekteinstellungen:
Ruby-2.2.4, Rails-4.2.0, ElasticSearch-Model-0.1.8
Ich habe die Daten bereits indiziert Artikel.Import
Jetzt rufe ich in der Konsole die gesamte Anzahl der veröffentlichten Artikel ab und verwende:
Article.search(query: { query_string: { query: {"status:1"} } })
Das funktioniert super! Jetzt möchte ich Artikel von finden user_ids
Die SQL für oben funktioniert wie Charme!
SELECT * FROM articles WHERE articles.user_id IN (5, 10)
Aber wenn ich versuche, das gleiche Konzept für zu verwenden query_string, es funktioniert nicht !!
Article.search(query: { query_string: { query: "status:1 AND user_id:[5, 10]" } })
Das gibt mir das Ergebnis:
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 ];
Bitte helfen Sie mir zu verstehen, was genau ich tun muss, damit dies funktioniert! Ich habe viel gegoogelt und dabei verschiedene Optionen wie RANGE, TO usw. gefunden, aber nicht diese :(
Hoffe bald von dir zu hören!
Antworten:
2 für die Antwort № 1Sie sollten nicht verwenden query_string
In diesem Fall. Verwenden terms query
stattdessen. Um mehrere Abfragen zu kombinieren, verwenden Sie bool
{
"query": {
"bool": {
"must": [
{
"term": {
"status": 1
}
},
{
"terms": {
"user_id": [
5,
10
]
}
}
]
}
}
}