2015-08-05 17 views
13

Tak więc mój problem jest zasadniczo taki sam jak opisany here, jednak nadal pozostaje bez odpowiedzi w grupie.Elastic Search zagnieżdżone zapytanie multimatch

Moje mapowania:

{ 
    "abstract": { 
     "properties": { 
      "summary": { 
       "type": "string" 
      } 
     } 
    }, 
    "authors": { 
     "type": "nested", 
     "properties": { 
      "first_name": { 
       "type": "string" 
      }, 
      "last_name": { 
       "type": "string" 
      } 
     } 
    } 
} 

I chciałbym przeprowadzić wyszukiwanie pełnotekstowe w obu tych dziedzinach, prawdopodobnie nierówno ważonych. Kwerenda, która przychodzi mi do głowy, ale niestety nie działa, byłoby to:

{ 
    "query": { 
     "bool": { 
      "should": [{ 
       "multi_match": { 
        "query": "higgs boson", 
        "fields": ["abstract.summary^5", "author.last_name^2"] 
       } 
      }] 
     } 
    } 
} 

nie dostać żadnych wyników z pola autorów, z powodu swojej osadzonej mapowania. Nie mogę też pozbyć się zagnieżdżonej właściwości - używam jej do agregacji. Każdy elegancki pomysł, jak go rozwiązać?

+0

W odwzorowaniu dokumentu nie widzę powiązań między 2 obiektami. Wierzę, że jeśli używasz obiektu "zagnieżdżonego", musisz go zmapować jako dziecko, wewnątrz "właściwości", a także określić "zapytanie zagnieżdżone". https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html – Jaider

Odpowiedz

5

Jedynym rozwiązaniem, które udało mi się wypracować, co nie jest przydatny, ani elegancki, ale jakoś działa to takie zapytanie:

"query": { 
    "bool": { 
     "should": [ 
      { 
       "nested": { 
        "path": "authors", 
        "query": { 
         "multi_match": { 
          "query": "higgs", 
          "fields": ["last_name^2"] 
         } 
        } 
       } 
      }, 
      { 
       "multi_match": { 
        "query": "higgs", 
        "fields": ["abstract.summary^5"] 
       } 
      } 
     ] 
    } 
} 

Nie jestem też pewien, czy pobudzanie będzie działać zgodnie z oczekiwaniami, zapewniając, że to ustawić w różnych zapytaniach. Wszelkie sugestie doceniane.

+0

zgodnie z https://www.elastic.co/guide/en/elasticsearch/guide/current/_boosting_query_clauses. html będziesz musiał przepisać zagnieżdżone zapytanie multimatch na kilka prostych zapytań zagnieżdżonych i dodać parametr 'boost'. więc w prostym przypadku z tylko jednym polem na zagnieżdżony multimatch, po prostu dodaj parametr "boost" na tym samym poziomie z 'zapytaniem' w następujący sposób: – ulkas

+0

' 'zagnieżdżony ': { " ścieżka ":" autorzy ", " zapytanie "{ "multi_match": { "zapytania": "", Higgs "pola"[" nazwisko_abonenta "] } } "booster": 2}' – ulkas

7

Zmiana mapowania do następnego, który używa include_in_root: true będzie można użyć zapytania Państwo oryginalny napisał:

{ 
    "abstract": { 
     "properties": { 
      "summary": { 
       "type": "string" 
      } 
     } 
    }, 
    "authors": { 
     "type": "nested", 
     "include_in_root": true, 
     "properties": { 
      "first_name": { 
       "type": "string" 
      }, 
      "last_name": { 
       "type": "string" 
      } 
     } 
    } 
} 

Możesz indeksu wewnętrznych obiektów zarówno jako zagnieżdżone pola i jako spłaszczone pól obiektu . Można to osiągnąć, ustawiając parametr include_in_parent na true. - Link

Uwaga: include_in_root mogą być przestarzałe w przyszłych wersjach elasticsearch na rzecz copy_to.

Powiązane problemy