2015-09-28 11 views
5

Czy to możliwe, aby zapytać jak tominimalna powinna odpowiadać na przefiltrowanej zapytania

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and" 
     } 
     } 
    } 
    } 

ze stwierdzeniem "minimum_should_match": "2"?

Wiem, że mogę użyć prostego zapytania (próbowałem, to działa), ale nie potrzebuję obliczać wyniku. Moim celem jest filtrowanie dokumentów zawierających 2 wartości.

Czy wynik ma duży wpływ na czas potrzebny na pobranie dokumentu?

Korzystanie z tej kwerendy:

"query": { 
    "filtered": { 
    "filter": { 
     "terms": { 
      "names": [ 
      "Anna", 
      "Mark", 
      "Joe" 
      ], 
      "execution" : "and", 
      "minimum_should_match": "2" 
     } 
     } 
    } 
    } 

mam ten błąd:

QueryParsingException[[my_db] [terms] filter does not support [minimum_should_match]] 
+1

Jeśli rozumiem Twoje pytanie, szukasz wszystkich dokumentów z "Anną", "Znakiem" i "Joe" w polu imion, podaruj lub podejmij 10% podobieństwa? Co się stanie, jeśli będziemy mieć dłuższe nazwy, takie jak 'Catherine' i' Wilhelmina', które pasują dokładnie, a nazwisko "Joe" zostanie odrzucone całkowicie z powodu 10%? – IanGabes

+0

Przepraszam, może moje pytanie nie było tak jednoznaczne :) Użyłem 90%, aby określić podzbiór listy. Edytuję z 2. Oznacza to, że dokument z Anną, Markiem i Catherine musi być dopasowany. Nie można dopasować dokumentu z Anną, Katarzyną i Wilheliminą. Głównym problemem jest to, że jeśli użyję minimum, które powinno pasować do przefiltrowanego zapytania, dostaję "QueryParsingException [[my_db] [terms] filtr nie obsługuje [minimum_should_match]]; ' – betto86

Odpowiedz

3

minimalna powinna być zgodna nie jest parametrem dla terms filter. Jeśli to jest funkcjonalność szukasz, mogę przepisać zapytanie tak, aby używać bool query zawinięte w query filter:

{ 
    "filter": { 
     "query": { 
     "bool": { 
      "must": [ 
       { 
        "term": { 
        "names": "Anna" 
        } 
       }, 
       { 
        "term": { 
        "names": "Mark" 
        } 
       }, 
       { 
        "term": { 
        "name": "Joe" 
        } 
       } 
      ], 
      "minimum_number_should_match": 2 
     } 
     } 
    } 
} 

Dostaniesz dokumenty dopasowanie korzystniej dokładnie wszystkie trzy, ale kwerenda będzie również dopasować dokument z dokładnie dwoma z trzech terminów. must jest niejawny i. Nie obliczamy również wyniku, ponieważ kwerendę wykonaliśmy jako filtr.

+0

Wszelkie sugestie dotyczące implementacji tego w szynach przy użyciu opakowania searchkick. – kishore

+1

Nie używaj "musi" w kwerendzie bool. Zamiast tego należy użyć 'should', ponieważ' minimum_number_should_match' ma zastosowanie tylko do powinno. – AmazingTurtle

Powiązane problemy