2.3.0

2016-04-28 13 views
1

ドキュメントはフィルタリングされたクエリは、2.0.0-beta1の中で推奨されていません2.3.0

であると述べています。代わりにboolクエリを使用して、クエリの場合は 句を、フィルタの場合はフィルタ句を使用します。

source

これは、フィルタ句の適切な使用ですか?

var result = client.Search<Post>(x => x 
.Query(q => q 
    .Bool(b => b 
     .Must(m => m 
      .MultiMatch(mp => mp 
       .Query(query) 
       .Fields(f => f 
        .Fields(f1 => f1.Title, f2 => f2.Body, f3 => f3.Tags)))) 
     .Filter(f => f 
      .Bool(b1 => b1 
       .Must(filters)))))); // or filter? 

クエリがstringとフィルタ生のJSON要求があるFunc<QueryContainerDescriptor<Post>, QueryContainer>[]

です:あなたはfilteredクエリクエリを使用しているだろう

"query": { 
    "bool": { 
     "must": [ 
     { 
      "multi_match": { 
      "query": "javascript", 
      "fields": [ "title", "body", "tags" ] 
      } 
     } 
     ], 
     "filter": [ 
     { 
      "bool": { 
      "must": [ 
       { "term": { "tags": { "value": "javascript" } } }, 
       { "term": { "tags": { "value": "ajax" } } }, 
       { "term": { "tags": { "value": "jquery" } } } 
      ] 
      } 
     } 
     ] 
    } 
+0

実行すると何が得られますか? – Val

答えて

1

、あなたが今boolクエリを使用しますmust句と同じように、filteredクエリフィルタの場合は、boolクエリfilter句を使用します。

boolクエリ内のmust句のセットが外側のブールfilter句に渡されたように折り返すように、複数のフィルタ句が必要です。

Elasticsearch 2.0では、queries and filters merged into oneでは、クエリコンテキストとフィルタコンテキストという概念があります。 boolクエリfilter句でラップすると、クエリ/フィルタはフィルタコンテキスト内にあり、関連性スコアは計算されず、キャッシュ可能になります。

NEST 2.xは、Elasticsearch 2.0の変更に対応し、クエリコンテキストとフィルタコンテキストの両方で使用できるクエリ(QueryContainer,QueryContainerDescriptor<T>など)を持っています。

+0

これは、元のクエリであっても、クエリにフィルタを適用する必要がある場合は、フィルタを使用する必要がありますか? – batmaci

+0

@batmaci - no。もし 'should'と' 'filter'はスコアリングに参加せず、一般的にはキャッシュされます。つまり、スコアを計算するドキュメントをフィルタリングしたい場合は、より高速になる傾向があります。 –

+0

QueryDescriptor NEST 2.x、@ RussCamでは利用できません。これに答えることはできますか?http://stackoverflow.com/questions/38136094/what-is-the-alternative-to-querydescriptor-nest-2-x –

関連する問題