2017-10-13 76 views
0

進出口新的彈性堆疊中的所有領域,要實現我的索引模型全局搜索,這就是我想出的時刻:C#巢ElasticSearch搜索,並突出顯示在所有類型的

 var response = _client.Search<IndexBase>(s => s 
                .Type(Types.Type(typeof(A), typeof(B))) 
                .Query(qry => qry 
                   .Bool(b => b 
                      .Must(m => m 
                        .QueryString(qs => qs 
                            .DefaultField("_all") 
                            .Query(request.Query))))) 
                .Highlight(h => 
                    h.Fields(f => f.Field("_all"))) 

但沒有亮點顯示在我的文件命中。我做什麼錯了?我如何檢索[index,count]對來突出顯示?

回答

3

嘗試*

 var response = _client.Search<IndexBase>(s => s 
               .Type(Types.Type(typeof(A), typeof(B))) 
               .Query(qry => qry 
                  .Bool(b => b 
                     .Must(m => m 
                       .QueryString(qs => qs 
                           .DefaultField("_all") 
                           .Query(request.Query))))) 
               .Highlight(h => 
                   h.Fields(f => f.Field("*"))) 
+0

我認爲你的答案是什麼,他正在尋找,但我會建議給大家看看這是爲什麼不工作,以及因爲這可能會導致性能或奇怪的結果。 –

+0

謝謝,雖然幫助,但我不明白爲什麼。 – eocron

+0

這可能取決於其彈性的版本,您正在使用,但我可以告訴你,對於熒光筆領域的「*」部分將運行對每個欄位,而不僅僅是「_all」字段,因爲它是一個通配符選擇這將選擇每個領域。 – Miek

0

取代 「_all」 的熒光筆你沒有正確索引的字段。

爲了執行突出顯示,需要對場的實際內容。如果所討論的字段被存儲(已存儲設置爲true在映射),它會被使用,否則,實際_source將被加載並在相關領域將從它被提取。

的_all字段不能從_source中提取,所以它只能被用於突出顯示,如果它映射到具有存儲設置爲true。 Source

此外,對於任何更大的數據集,這可能會導致性能下降,因此最好是以正確的方式設置搜索字段並知道您要突出顯示的內容。

+0

感謝您的回覆,我想領域中進行搜索,只是因爲我想在所有類型的分散搜索和不介意這領域中使用的,所以它是通過設計的代碼和邏輯簡單,當用戶搜索的東西 - 我可以顯示索引文件的geterogenous列表,並動態地突出顯示我想要的任何字段。 – eocron

相關問題