2015-04-14 24 views
7

Jak dodać rozmytość do zapytania multi_match? Więc jeśli ktoś ma szukać "basballa", nadal znajdzie artykuły "baseballowe". Obecnie mój kwerendy wygląda następująco:ElasticSearch zapytanie multi_match przez wiele pól za pomocą 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" 
        ] 
       } 
      } 
     } 
    } 
} 

Jedną z opcji szukałem na to, aby zrobić coś takiego, po prostu nie wiem, czy to jest najlepsza opcja. Ważne jest zachowanie sortowania w oparciu o punktację:

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

Sugestie?

Odpowiedz

18

Aby dodać niedokładność do multiquery trzeba dodać właściwość niedokładność jak opisano tutaj:

{ 
    "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 

       } 
      } 
     } 
    } 
} 

Proszę zauważyć, że prefix_length wyjaśniono w dokumencie jako:

liczbę początkowych znaków, które nie będzie "fuzzified". Pomaga to zmniejszyć liczbę terminów, które muszą zostać zbadane. Wartość domyślna to 0.

Aby sprawdzić możliwe wartości rozmytość odwiedź stronę ES docs.

+0

To nie działa w ES 6: 'Fuzziness not allowed for type [phrase]' – Alphaaa