2015-06-26 37 views
13

ElasticSearch NEST'i kullanarak, sorgularımdan beklenen sonuçları almamda sorun yaşıyorum. şöyle My endeks/türü düzenidir:ElasticSearch NEST Çoklu Türleri ve Tüm Alanları Ara

  • tiyatro (endeks)
    • olay (tipleri)
    • tiyatro
    • promosyon
    • genel içerikler

Bu türlerin her birinin kendi alanları vardır ve Verileri dizine eklemek için NEST'in Index() yöntemini kullanıyorum. Ben dizine doğru bir şekilde oluyor doğrulayabilirsiniz:

// TODO: Put settings in config 
var node = new Uri("http://localhost:9200"); 
var connSettings = new ConnectionSettings(node); 
connSettings.SetDefaultIndex("theatres"); 
connSettings.ThrowOnElasticsearchServerExceptions(); 

var client = new ElasticClient(connSettings); 
:
  • verileri Başvuru için

görüntülemek için Head eklentisini kullanarak http://localhost:9200/theatres/_mapping

  • baktığımızda, burada müvekkilim yapılandırma

    Sorgu

    Şimdi, sorgu için, tüm türlerini ve dizini içindeki alanlarını aramak istiyorum. Kafa eklentisi kullanarak, sorgu oluşturmak ve beklenen sonuçları almak mümkün: o oluşturduğunu sorguyu kullanarak enter image description here

    , aşağıdaki Nükleer Tehlike sorgu çalıştı: Ancak

    var query = "waukesha"; // This would be passed in 
    
    var resp = client.Search<dynamic>(s => s 
        .From(0) 
        .Take(10) 
        .Query(qry => qry 
         .Bool(b => b 
         .Must(m => m 
          .QueryString(qs => qs 
           .DefaultField("_all") 
           .Query(query)))))); 
    

    , bu bana verir farklı sonuç. NEST, farkında olmadığım sahnelerin arkasında bir şey mi yapıyor? Yoksa bu desteklenmiyor mu?

  • +0

    yerine sökünüz (20) .Size (10) öneririm lazım işlevsellik aynı olmasına rağmen, bunu hata için bir değişken olarak kaldırın. Ayrıca, .DefaultField'ı kaldırabileceğine inanıyorum ve tüm alanlar aranacak. Bunu deneyebilir misin? Ben bu –

    +1

    @ DanielHoffmann-Mitscherling bunu merak ediyorum ve hala 1 almalısınız hala 0 sonuç olsun, –

    +1

    Yani garip! DefaultField ("_ all") ekleyebilir ve ayrıca .AllTypes() ekler misiniz? Her türüyle bir sorgu oluşturmak için NEST'i manuel olarak zorlamak bize daha fazla bilgi verebilir –

    cevap

    17

    Sorgunuzda Ayrıca Yani .Types("type1", "type1")

    kullanarak birden türlerini belirtebilirsiniz .AllTypes()

    eksik:

    var query = "waukesha"; // This would be passed in 
    
    var resp = client.Search<dynamic>(s => s 
        .AllTypes() 
        .From(0) 
        .Take(10) 
        .Query(qry => qry 
         .Bool(b => b 
         .Must(m => m 
          .QueryString(qs => qs 
           .DefaultField("_all") 
           .Query(query)))))); 
    
    +0

    Buraya tür tabanlı Terim filtresini kullanabilir miyiz? Örnek: İki tip: "type1", "tip2" type1 şunlara sahiptir: name, locationid, type2 şunlara sahiptir: countryid ve stateid bunu kullanarak nasıl tür tabanlı bir terim süzgeci oluşturabiliriz? –

    +0

    @MohanGopi - Evet: Tür. () .Type () ' –

    İlgili konular