5

Utilizziamo ElasticSearch per la ricerca di milioni di tag. I nostri utenti dovrebbero essere in grado di includere operatori booleani (+, -, "xy", AND, OR, parentesi). Se non viene restituito alcun riscontro, torniamo a un suggerimento di ortografia fornito da ES e ricerchiamo. Questa è la nostra risposta:Come abilitare la sfocatura per le query a frase in ElasticSearch

$ curl -XGET 'http://127.0.0.1:9200/my_index/my_type/_search' -d ' 
{ 
    "query" : { 
     "query_string" : { 
      "query" : "some test query +bools -included", 
      "default_operator" : "AND" 
     } 
    }, 
    "suggest" : { 
     "text" : "some test query +bools -included", 
     "simple_phrase" : { 
      "phrase" : { 
       "field" : "my_tags_field", 
       "size" : 1 
      } 
     } 
    } 
} 

Invece di fornire solo un ripiego per i suggerimenti ortografici, vorremmo consentire la corrispondenza fuzzy. Se, ad esempio, un utente cerca "stackoverfolw", ES dovrebbe restituire corrispondenze per "stackoverflow".

domanda aggiuntiva: Qual è il metodo migliore per "correggere" gli errori di ortografia? Come è ora, dobbiamo eseguire due richieste successive, prima con il termine di ricerca originale, poi con il termine suggerito da ES.

risposta

4

Il parametro query_string supporta un po 'di confusione ma solo quando si utilizza l'operatore ~, che a mio avviso non è il proprio caso. Aggiungerei un fuzzy query e inseritelo con o con il file query_string esistente. Ad esempio, è possibile utilizzare uno bool query e aggiungere la query fuzzy come clausola should, mantenendo la stringa_riga originale come clausola must.

Per quanto riguarda la domanda aggiuntiva su come correggere gli errori di ortografia: utilizzare le domande fuzzy per correggerli automaticamente e due richieste successive se si desidera che l'utente selezioni la correzione corretta da un elenco (es. Volevi dire), ma anche il tuo approccio sembra buono.

+0

Grazie - questo conferma i miei pensieri. Ad ogni modo, restiamo fedeli a ciò che abbiamo già. Sembra essere un approccio molto più veloce. Riguardo alla "query fuzzy", i documenti di ElasticSearch menzionano persino un avvertimento sul non essere ben scalabile. –