/ / Elasticsearch query_string mehrwertige Felder - Ruby-on-Rails, Elasticsearch, Elasticsearch-Rails

Elasticsearch query_string mehrwertige felder - ruby-on-rails, elasticsearch, elasticsearch-rails

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 № 1

Sie 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
]
}
}
]
}
}
}