2016-05-24 14 views
0

Ich habe eine Autocomplete-Funktion für eine kleine Suche App mit elasticsearch Schindeln erstellt. Wenn ich den Analyzer und Tokens teste, scheint alles korrekt eingerichtet zu sein.Warum bekomme ich 0 Ergebnisse

PUT /autocomplete 
{ 
    "settings": { 
    "index": { 
     "number_of_shards": 1, 
     "number_of_replicas": 1 
    }, 
    "analysis": { 
     "filter": { 
     "autocomplete_shingles_filter": { 
      "type": "shingle", 
      "min_shingle_size": 2, 
      "max_shingle_size": 5, 
      "output_unigrams": false 
     } 
     }, 
     "analyzer": { 
     "autocomplete_shingles_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "autocomplete_shingles_filter" 
      ] 
     } 
     } 
    } 
    } 
} 

GET /autocomplete/_analyze?analyzer=autocomplete_shingles_analyzer&text=2010 toyota camry 

Aber dann, wenn ich gehe, um tatsächlich den Index und die Zuordnung zu erstellen und eine Übereinstimmung Abfrage mit dem _all Feld verwenden, erhalte ich 0 Ergebnisse

"mappings": { 
"suggestions": { 
    "_all": { 
    "enabled": true, 
    "index_analyzer": "autocomplete_analyzer", 
    "search_analyzer": "autocomplete_analyzer" 
    }, 
    "properties": { 
    "makes": { 
     "type": "string", 
     "include_in_all": true 
     }, 
     "models": { 
     "type": "string", 
     "include_in_all": true 
     }, 
     "years": { 
     "type": "string", 
     "include_in_all": true 
     } 
     } 
    } 
    } 
} 

Hier ist ein Beispiel der Daten

PUT /autocomplete/suggestions/_bulk 
{"index": {"_id":"1"}} 
{"years": ["2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017"]} 
{"index": {"_id":"2"}} 
{"makes": "Acura", "models": ["Legend Integra NSX Vigor TL RL SLX CL MDX RSX TSX RDX ZDX"]} 
{"index": {"_id":"3"}} 
{"makes": "Alfa Romeo", "models": ["164 Spider"]} 
{"index": {"_id":"4"}} 
{"makes": "Aston Martin", "models": ["DB9 Vanquish S DB9 Volante V8 Vantage Vantage DBS Rapide V8 Vantage S V12 Vantage Virage"]} 
{"index": {"_id":"5"}} 
{"makes": "Alfa Romeo", "models": ["164 Spider"]} 

Warum funktioniert das, wenn ich die validate Analyzer-API verwende, aber wenn ich den Index, das Mapping und die Abfrage tatsächlich erstelle ... bekomme ich 0 Ergebnisse? Was mache ich falsch?

UPDATE

{ 
    "query": { 
    "match": { 
     "_all": { 
     "query": "2010 acura integra", 
     "operator": "and" 
     } 
    } 
    } 
} 

UPDATE 2 ich ich herausgefunden es glauben, ich Operator wurde mit: und - die alle Begriffe gemeint hatte in allen Bereichen sein, die nicht funktionieren würde. Löschen Sie den Operator und ich bekomme Ergebnisse. Bei meinen Tests scheint es jedoch, dass die Multi-Match-Abfrage dafür besser geeignet ist, weil 1) ich Felder anheben kann 2) Ich muss nicht das Feld _all verwenden 3) Es scheint, dass es bessere Optionen zum Optimieren der Frage, um es im Laufe der Zeit zu optimieren, bin ich auf dem richtigen Weg dorthin?

+0

Und was ist die Abfrage, die Sie verwenden? –

+0

@AndreiStefan, siehe UPDATE, Suchabfrage für das Feld _all - Gibt es eine bessere Abfrage? – user3125823

Antwort

0

Sollten Sie nicht autocomplete_shingles_analyzer anstelle von autocomplete_analyzer in Ihrem Feld _all verwenden?

+0

Zatarain, danke für die Heads-up, behoben, aber immer noch keine Ergebnisse – user3125823

Verwandte Themen