2015-12-25 100 views
0

我應該使用什麼方法才能讓我的查詢返回來自輸入短語的文本中至少有2個關鍵字的匹配。Elasticsearch NEST - 短語搜索

例如,如果輸入「招呼朋友」我要返回的結果包含的文件,其中「你好」和「朋友」某處的文本。如果輸入「你好朋友」我想在結果裏出現3個關鍵字中的2個。或者至少有最好的組合結果在最上面。 如果我使用下面的代碼,我得到的結果是「你好」或「朋友」,但不是兩者。

 var searchResults = client.Search<Thread>(s => s 
     .Type("threads") 
     .From(0) 
     .Size(100) 
     .Query(q => q 
      .Match(qs => qs 
       .OnField(p => p.Posttext) 
       .Query("hello friend") 
       ) 
      ) 
      .Highlight(h => h 
      .OnFields(
       f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150) 
       ) 
      ) 
     ); 

我能得到的結果我想通過這樣的一個代碼,但它是不靈活,因爲短語可以用文字的任意數量。

 var searchResults = client.Search<Thread>(s => s 
     .Type("threads") 
     .From(0) 
     .Size(100) 
     .Query(q => q 
      .Match(qs => qs 
       .OnField(p => p.Posttext) 
       .Query("hello") 
       ) 
       && 
       q.Match(qs => qs 
       .OnField(p => p.Posttext) 
       .Query("friend") 
       ) 
      ) 
      .Highlight(h => h 
      .OnFields(
       f => f.OnField("posttext").PreTags("<b>").PostTags("</b>").FragmentSize(150) 
       ) 
      ) 
     ); 

我想我錯過了一些東西。請幫忙。

在此先感謝。

回答

0

我發現添加.O perator(Operator.And)匹配查詢適用於我的情況。但我需要進一步調查詞組搜索。

+0

好吧..運營商的方式就像短語,但他們的意思是,文件必須同時具有條款..但是,如果使用或運營..它會做任何一個術語.. –

+0

這是正確的。 –