1

Ich versuche, eine Abfrage zu erstellen, wo der Benutzer nach ES-Dokumenten suchen kann, wo das Markenfeld gleich einer Zeichenfolge ist. Hier ist die Abfrage, die ich derzeit habe, die funktioniert, aber keine Filterung hat. Ich benutze elasticsearch-rails mit Ruby on Rails.Add to ElasticSearch Query

@products = Product.search(
    query:{ 
     function_score:{ 
      query: {  
      multi_match: { 
       fields: ['brand^5', '_all'], 
       query: "#{query}", 
       fuzziness: "AUTO" 
      } 
      }, 
      field_value_factor:{ 
      field: "popularity", 
      modifier: "log1p" 
      } 
     } 
    }).page(page).per(25) 

Ich habe dem Filter zu Testzwecken einen Markennamen zugewiesen. In diesem Fall sollte der Nutzer Ergebnisse für sein Such-Keyword mit dem Markennamen "NordicTrack" sehen.

query:{ 
     function_score:{ 
      query: {  
      multi_match: { 
       fields: ['brand^5', '_all'], 
       query: "#{query}", 
       fuzziness: "AUTO" 
      } 
      }, 
      filter: { 
      term: {"brand":"NordicTrack"} 
      }, 
      field_value_factor:{ 
      field: "popularity", 
      modifier: "log1p" 
      } 
     } 
    } 
    ).page(page).per(25) 

Diese Abfrage gibt mir die folgende Fehlermeldung:

[400] {"error":{"root_cause":[{"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139}],"type":"parsing_exception","reason":"no [query] registered for [filter]","line":1,"col":139},"status":400} 

Ich bin nicht sicher, warum dies nicht funktioniert. Jede Hilfe wäre willkommen!

+0

Sonderbare, sollte es funktionieren. Was ist Ihre elastische Suchversion? Können Sie versuchen mit 'term: {brand: 'NordicTrack'}' als Filter? –

Antwort

1

Ich bin mir nicht sicher, wie Elasticsearch-Schienen mit Ruby on Rails Query analysiert. Aber ich versuchte unter Abfrage in Kibana:

GET test/testt/_search 
{ 
    "query": { 
    "filter": { 
     "term": { 
     "brand": "NordicTrack" 
     } 
    } 
    } 
} 

die zu Ihrem Teil der Abfrage ist etwas ähnlich, die Sie den Fehler geben, und ich habe auch die gleichen Fehler. Aber wenn ich die Begriff Abfrage mit Bool-Abfrage umbrechen, dann gibt es die gewünschten Ergebnisse zurück. Abfrage:

GET test/_search 
{ 
    "query": { 
    "bool": { 
     "filter": { 
     "term": { 
      "brand": "NordicTrack" 
     } 
     } 
    } 
    } 
} 

Geben Sie es eine Chance.

0

Versuchen eine gefilterte Abfrage wie folgt verwendet:

query: { 
    function_score: { 
     query: { 
     filtered: { 
      query: { 
      multi_match: { 
       fields: ['brand^5', '_all'], 
       query: "#{query}", 
       fuzziness: "AUTO" 
      } 
      }, 
      filter: { 
      term: { 
       brand: "NordicTrack" 
      } 
      } 
     } 
     }, 
     field_value_factor:{ 
     field: "popularity", 
     modifier: "log1p" 
     } 
    } 
    }