2017-12-28 27 views
1

C#でNESTクライアントを使用して、elasticsearchクラスタとやりとりしています。NESTでelasticsearchでソートするための解析されていないテキストキーワードを追加するには?

私は文字列値に基づいてソートしようとしています。しかし、thisによると、フィールドはテキストフィールドなので、私はそれを行うことはできません。

私はキーワードフィールドを追加して、より良いパフォーマンスを得るためにそれに基づいてソートしたいと考えています。このような何か:

{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "my_field": { 
      "type": "text", 
      "fields": { 
      "keyword": { 
       "type": "keyword" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

しかし、私は最高のNESTクライアントにそれを変換する方法と、その後my_field.keywordに基づいてソートするかどうかはわかりません。

私はこれを私のマッピングとして持っていますが、ソートの句がどのように見えるかわからないので、私はそれをテストする方法がわかりません。

.Mappings(m => m 
    .Map<Product>(mm => mm 
     .Properties(p => p 
      .Text(t => t 
       .Name(n => n.ProductName) 
       .Analyzer("custom") 
       .Fields(f => f 
        .Keyword(k => k) 
       ) 
      ) 
     ) 
    ) 
) 

私はNESTのドキュメントを掘り下げようとしてきましたが、このエッジ機能はさらに難しくなっています。マルチフィールドのサブ -fieldを参照する

+2

'string'プロパティを複数のフィールドとアナライザでマッピングする:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/multi-fields.html '.Suffix(" ")'を使用してソートを参照してください –

+0

ありがとう!それは仕事を終えた。これを回答として投稿すると、正しいとマークします。Russ –

答えて

1

、クエリに

{ 
    "query": { 
    "match": { 
     "description.keyword": { 
     "query": "Wolverine" 
     } 
    } 
    } 
} 

結果メンバアクセスラムダ式

client.Search<Comic>(s => s 
    .Query(q=> q 
     .Match(m => m 
      .Field(f => f.Description.Suffix("keyword")) 
      .Query("Wolverine") 
     ) 
    ) 
); 

.Suffix("suffixname")拡張メソッドを使用することができ好きな場合は文字列を指定することもできます

client.Search<Comic>(s => s 
    .Query(q=> q 
     .Match(m => m 
      .Field("description.keyword")) 
      .Query("Wolverine") 
     ) 
    ) 
); 
関連する問題