2016-09-01 8 views
1

私はマルチ検索で他のフィールドよりもいくつかのフィールドを上げようとしています。私はあなたが私はそれはしかしFieldsに変換する方法を見つけ出すことができていない。このNest MultiMatch Field Boost

var titleField = Infer.Field<Page>(p => p.Title, 2); 

を行うことによって、ブーストFieldを作成することができます参照してドキュメントを見てみると

。このような

何かが右ではありません

var bodyField = Infer.Field<Page>(p => p.Body); 
var titleField = Infer.Field<Page>(p => p.Title, 2); 
var metaDescriptionField = Infer.Field<Page>(p => p.MetaDescription, 1.5); 
var metaKeywordsField = Infer.Field<Page>(p => p.Keywords, 2); 

MultiMatchQuery multiMatchQuery = new MultiMatchQuery() 
{ 
    Fields = Infer.Fields<Page>(bodyField, titleField, metaDescriptionField, metaKeywordsField), 
      Query = search.Term 
}; 

は、私はあなたが使用することができます

var titleFieldString = "Title^2"; 

などの分野のための文字列名を使用する必要があるとInfer.Fields

答えて

3

にそれらを渡しますか強く型付けされたInfer.Field<T>(); FieldからFieldsへの暗黙的な変換があり、追加のフィールドは.And()で追加できます。ここでは一例だ

void Main() 
{ 
    var client = new ElasticClient(); 

    Fields bodyField = Infer.Field<Page>(p => p.Body); 
    var titleField = Infer.Field<Page>(p => p.Title, 2); 
    var metaDescriptionField = Infer.Field<Page>(p => p.MetaDescription, 1.5); 
    var metaKeywordsField = Infer.Field<Page>(p => p.Keywords, 2); 

    var searchRequest = new SearchRequest<Page>() 
    { 
     Query = new MultiMatchQuery() 
     { 
      Fields = bodyField 
         .And(titleField) 
         .And(metaDescriptionField) 
         .And(metaKeywordsField), 
      Query = "multi match search term" 
     } 
    }; 

    client.Search<Page>(searchRequest); 
} 

public class Page 
{ 
    public string Body { get; set; } 
    public string Title { get; set; } 
    public string MetaDescription { get; set; } 
    public string Keywords { get; set; } 
} 

これはあなたにも暗黙的にFields

var searchRequest = new SearchRequest<Page>() 
{ 
    Query = new MultiMatchQuery() 
    { 
     Fields = new[] { 
      bodyField, 
      titleField, 
      metaDescriptionField, 
      metaKeywordsField 
     }, 
     Query = "multi match search term" 
    } 
}; 

に変換しFieldの配列を渡すだけでなく、文字列

の配列を渡すことができ

{ 
    "query": { 
    "multi_match": { 
     "query": "multi match search term", 
     "fields": [ 
     "body", 
     "title^2", 
     "metaDescription^1.5", 
     "keywords^2" 
     ] 
    } 
    } 
} 

を生み出します

var searchRequest = new SearchRequest<Page>() 
{ 
    Query = new MultiMatchQuery() 
    { 
     Fields = new[] { 
      "body", 
      "title^2", 
      "metaDescription^1.5", 
      "keywords^2" 
     }, 
     Query = "multi match search term" 
    } 
};