2015-06-19 3 views
0

У меня возникли проблемы с совпадением нулевого термина в NEST. Я пытаюсь получить некоторые детали по запросу. Это работает нормально, но одна вещь, которую я не могу понять - По какой-то причине я не могу использовать термин, равный нулевому значению. Что я делаю неправильно?Elasticsearch - Term null?

Мой код:

   result = _mainManager.Client.Search<object> 
      (q => q 
      .Type("Mail") 
      .Query(c => 
        c.Term("SentMail_Sender_Id", userId) && 
        c.Term("SentMail_EmbedAccountId", null) && 
        !c.Term("SentMail_Status", Status.REMOVED.ToString().ToLower()) && 
        c.Range(v => v.OnField("SentMail_Upload_Files_Count").Greater(0))) 
      .Size(int.MaxValue) 
      .Sort(s => s.OnField("SentMail_Creation_Date").Descending())); 

Он работает нормально, не нулевой термин не найден в моем результате Json:

{ 
"size": 2147483647, 
"sort": [ 
{ 
    "SentMail_Creation_Date": { 
    "order": "desc" 
    } 
    } 
], 
"query": { 
"bool": { 
    "must": [ 
    { 
     "term": { 
     "SentMail_Sender_Id": { 
      "value": 7186 
     } 
     } 
    }, 
    { 
     "range": { 
     "SentMail_Upload_Files_Count": { 
      "gt": "0" 
     } 
     } 
    } 
    ], 
    "must_not": [ 
    { 
     "term": { 
     "SentMail_Status": { 
      "value": "removed" 
     } 
     } 
    } 
    ] 
    } 
} 
} 

ответ

1

Нашел!

   result = _mainManager.Client.Search<object> 
      (q => q 
      .Type("Mail") 
      .Query(c => 
        c.Term("SentMail_Sender_Id", userId) && 
        !c.Term("SentMail_Status", Status.REMOVED.ToString().ToLower()) && 
        c.Range(v => v.OnField("SentMail_Upload_Files_Count").Greater(0))) 
      .Filter(f => f.Missing("SentMail_EmbedAccountId")) 
      .Size(int.MaxValue) 
      .Sort(s => s.OnField("SentMail_Creation_Date").Descending())); 
Смежные вопросы