2017-05-16 4 views
0

Ich habe eine NEST-Abfrage geschrieben, die Dokumente mit Wörtern in einer Zeichenfolge ("queryString" unten) entspricht. Ich möchte Dokumente ausfiltern, die das Wort "nicht" enthalten. Ich habe die boolesche Abfrage ausprobiert, aber die Dokumente werden nicht herausgefiltert. Was mache ich hier falsch?NOT LIKE Abfrage in NEST

var searchResponse2 = _EsClientDAL.Current.Search<DTO.riSmall>(s => s 
         .Size(50) 
         .Query(q => q 
          .Bool(b => b 
           .Must(mu => mu 
            .Match(m => m 
             .Field(f => f.SceneText) 
             .Query(queryString) 
            ) 
            , 
            mu => !mu 
            .Term(p => p.SceneText, "not") 
            ) 
           ) 
          ) 
         .Highlight(h => h 
          .PreTags("|") 
          .PostTags("|") 
          .Fields(
           fs => fs 
            .Field(p => p.SceneText) 
            .Type("plain") 
            .ForceSource() 
            .FragmentSize(150) 
            .NumberOfFragments(3) 
            .NoMatchSize(150) 
           ) 
          ) 
         ); 

Antwort

2

Sie folgende Abfrage versuchen must_not

     Query(q => q 
         .Bool(b => b 
          .Must(mu => mu 
           .Match(m => m 
            .Field(f => f.SceneText) 
            .Query(queryString) 
           ) 
          ) 
          .MustNot(mn=> mn 
          .Term(p => p.SceneText, "not") 
          ) 
         ) 
         ) 

Hoffnung mit diesem Sie

1

Neben Richa's answer hilft, können Sie auch die overloaded operators verwenden die gleiche Abfrage zu schreiben, wie Richa mehr schlägt prägnant

var searchResponse = client.Search<MyDocument>(s => s 
    .Size(50) 
    .Query(q => q 
     .Match(m => m 
      .Field(f => f.SceneText) 
      .Query(queryString) 
     ) && !q 
     .Term(p => p.SceneText, "not") 
    ) 
    .Highlight(h => h 
     .PreTags("|") 
     .PostTags("|") 
     .Fields(
      fs => fs 
       .Field(p => p.SceneText) 
       .Type("plain") 
       .ForceSource() 
       .FragmentSize(150) 
       .NumberOfFragments(3) 
       .NoMatchSize(150) 
      ) 
     ) 
    ); 
+0

Danke, Leute. Diese arbeiten. Ich habe herausgefunden, dass ich ein Problem mit "nicht" habe, weil ich Stoppwörter in meinem Analysator verwende ... Ich werde diese Stoppwörter entfernen – witchlightning