2016-04-19 16 views
0

Mein Anwendungsfall erfordert die Abfrage unserer elastischen Suchdomäne mit nachfolgenden Platzhaltern. Ich wollte Ihre Meinung zu den Best Practices für den Umgang mit solchen Platzhaltern in den Abfragen erhalten.Umgang mit Platzhaltern in strukturierten Abfragen mit elastischer Suche

Haben Sie die folgenden Klauseln denken Zugabe für die Abfragen eine gute Praxis ist:

"query" : { 
    "query_string" : { 
     "query" : "attribute:postfix*", 
     "analyze_wildcard" : true, 
     "allow_leading_wildcard" : false, 
     "use_dis_max" : false 
    } 
} 

I führende Platzhalter nicht erlaubt habe, da es sich um eine schwere Operation ist. Wie auch immer, ich wollte, wie gut es ist, Wildcard für jede Anfrage auf lange Sicht zu analysieren. Mein Verständnis ist, Analyse-Wildcard würde keine Auswirkungen haben, wenn die Abfrage tatsächlich keine Platzhalter hat. Ist das korrekt?

Antwort

0

Wenn Sie die Möglichkeit haben, den Mapping-Typ und die Indexeinstellungen zu ändern, erstellen Sie einen benutzerdefinierten Analysator mit edge-n-gram token filter, der alle Präfixe des -Felds indiziert.

curl -XPUT http://localhost:9200/your_index -d '{ 
    "settings": { 
     "analysis": { 
      "filter": { 
       "edge_filter": { 
        "type": "edgeNGram", 
        "min_gram": 1, 
        "max_gram": 15 
       } 
      }, 
      "analyzer": { 
       "attr_analyzer": { 
        "type": "custom", 
        "tokenizer": "standard", 
        "filter": ["lowercase", "edge_filter"] 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "your_type": { 
      "properties": { 
       "attribute": { 
        "type": "string", 
        "analyzer": "attr_analyzer", 
        "search_analyzer": "standard" 
       } 
      } 
     } 
    } 
}' 

Dann, wenn Sie Index ein Dokument, das attribute Feldwert (zB) postfixing werden im Laufe der folgenden Token indiziert werden: p, po, pos, post, postf, postfi, postfix, postfixi, postfixin, postfixing .

Schließlich können Sie dann einfach das Feld für den postfix Wert mit einer einfachen match Abfrage wie folgt abfragen. Sie müssen keinen leistungsschwachen Platzhalter in einer Abfragezeichenfolgenabfrage verwenden.

{ 
    "query": { 
    "match" : { 
     "attribute" : "postfix" 
    } 
    } 
} 
+0

Hat dies geholfen? Brauchen Sie mehr Informationen? – Val