2015-04-14 8 views
7

Come posso aggiungere sfocatura a una query multi_match? Quindi, se qualcuno è alla ricerca di 'basball', troverà comunque articoli 'baseball'. Attualmente la mia domanda è simile al seguente:ElasticSearch multi_match query su più campi con Fuzziness

POST /newspaper/articles/_search 
{ 
    "query": { 
     "function_score": { 
      "query": { 
       "multi_match": { 
        "query": "baseball", 
        "type": "phrase", 
        "fields": [ 
         "subject^3", 
         "section^2.5", 
         "article^2", 
         "tags^1.5", 
         "notes^1" 
        ] 
       } 
      } 
     } 
    } 
} 

Una possibilità che stavo guardando è quello di fare qualcosa di simile, solo che non so se questa è l'opzione migliore. È importante mantenere l'ordinamento in base al punteggio:

"query" : { 
     "query_string" : { 
     "query" : "subject:basball^3 section:basball^2.5 article:basball^2", 
     "fuzzy_prefix_length" : 1 
     } 
    } 

Suggerimenti?

risposta

18

Per aggiungere confusione a una multiquery è necessario aggiungere la proprietà confusione come descritto qui:

{ 
    "query": { 
     "function_score": { 
      "query": { 
       "multi_match": { 
        "query": "baseball", 
        "type": "phrase", 
        "fields": [ 
         "subject^3", 
         "section^2.5", 
         "article^2", 
         "tags^1.5", 
         "notes^1" 
        ], 
        "fuzziness" : "AUTO", 
        "prefix_length" : 2 

       } 
      } 
     } 
    } 
} 

Si prega di notare che prefix_length spiegato nel documento come:

Il numero di caratteri iniziali che non sarà "fuzzificato". Questo aiuta a ridurre il numero di termini che devono essere esaminati. Il valore predefinito è 0.

Per verificare i possibili valori di sfocatura, visitare il numero ES docs.

+0

Questo non funziona in ES 6: 'Fuzziness non consentito per tipo [frase]' – Alphaaa