2015-08-05 23 views
13

Sorunum, temel olarak here açıklandığı gibi aynıdır, ancak yine de grupta yanıtlanmamıştır.Elastic Search iç içe çok parçalı sorgu

Benim haritalama:

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

Ve bu alanların her ikisi üzerinde tam metin araması, muhtemelen eşit olarak değerlendirilmemesi gerçekleştirmek istiyoruz. çalışmıyor maalesef aklıma geliyor, ama sorgu, bu şöyle olacaktır:

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

Çünkü onun iç içe eşleme, yazarlar alanından herhangi bir sonuç alamadım. Ben de yuvalanmış mülkten kurtulamıyorum - bunu toplamalar için kullanırım. Herhangi bir zarif fikir nasıl çözülür? öyle sağlayarak, ben de beklendiği gibi çalışır artırılması emin değilim

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

:

+0

Belge eşleştirmesinde, 2 nesne arasındaki bağlantıları göremiyorum. Eğer 'nested' nesnesini kullanıyorsanız, onu bir özellik olarak, 'özellikler' içinde eşleştirmeniz ve ayrıca 'iç içe geçmiş bir sorgu' belirtmeniz gerektiğine inanıyorum. https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html – Jaider

cevap

5

Ben kullanışlı ne de zarif olmadığı, çalışmak yönetilen ama bir türlü işleri tek çözüm bu tür sorgu farklı sorgularda ayarlayın. Herhangi bir öneri takdir edildi. Orijinal yazdığın sorgu kullanmanızı sağlayacak include_in_root: true kullanan aşağıdaki birine eşleşmiş olarak değiştirilmesi

+0

https://www.elastic.co/guide/en/elasticsearch/guide/current/_boosting_query_clauses adresine göre. html, iç içe geçmiş çoklu sorguyu birkaç basit iç içe geçmiş sorguya yeniden yazmanız ve "boost" parametresini eklemeniz gerekir. böylece basit durumunuzda, yuvalanmış multimatch başına sadece bir alanla, basitçe "boost" paramını "query" ile aynı seviyede ekleyin: – ulkas

+0

"iç içe": { "yol": "yazarlar", " sorgu ": { "multi_match": { "sorgusu:" "higgs", "alanlar"[" last_name "] } } "takviye": 2} ' – ulkas

7

:

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

Sen iç içe alanlar olarak ve düzleştirilmiş nesne alan olarak hem indeks iç nesnelere isteyebilirsiniz . Bu, include_in_parent değerini true olarak ayarlayarak başarılabilir. - Link

Not: include_in_rootcopy_to lehine elasticsearch gelecekteki sürümlerinde kaldırılmış olabilir.

İlgili konular