2016-09-01 4 views
1

멀티 매치 검색에서 다른 필드보다 일부 필드를 높이려고합니다.네스트 멀티 매치 필드 부스트

난 당신이 내가 그 생각 Fields로 변환하는 방법을 알아낼 수 없었던이

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 
}; 

당신은을 사용할 수 있습니다 내가 Infer.Fields

답변

3

로 사람들을

var titleFieldString = "Title^2"; 

같은 필드의 문자열 이름을 사용하고 통과해야합니까 옳지 않다 강하게 타자를 친다 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" 
    } 
};