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?
Und was ist die Abfrage, die Sie verwenden? –
@AndreiStefan, siehe UPDATE, Suchabfrage für das Feld _all - Gibt es eine bessere Abfrage? – user3125823