2016-07-27 12 views
2

私の問題: 私は、クエリおよび集計を行うれている文字列プロパティでインデックスを、持っています。そのプロパティを分析してタームクエリを実行し、そのプロパティのターム集計を分析しないようにしたいと思います。 elasticsearchの以前のバージョンではそのための多門マッピングがありましたが、それは、そのライブラリのバージョン2.0以降行っています。それをどうすれば実現できますか?の代替?

追記: それはefficentソリューションのように見えるしていませんので、私は、私のインデックスにそのプロパティを複製し、分析し、重複の一つととして、分析されていない他のものをマーキング避けたいです。

私が使用するライブラリ(c#): Elasticsearch.net 2.3.3およびNEST 2.3.3。

ご提案は大歓迎です。

答えて

3

multi_fieldマッピングはまだElasticsearch 2.xおよびNEST 2.xの中に存在します。ここでの例では、ここでLocationプロパティがそれに適用されるデフォルトStandardアナライザでmulti_fieldとしてマッピングされ

client.Map<Document>(m => m 
    .Index("index-name") 
    .AutoMap() 
    .Properties(p => p 
     .String(s => s 
      .Name(n => n.Location) 
      .Fields(f => f 
       .String(fs => fs 
        .Name("raw").NotAnalyzed() 
       ) 
      ) 
     ) 
    ) 
); 

です。これはインデックス内のlocationフィールド内になります。さらに、location.rawフィールドは索引付けされており、分析されません。分析されlocationプロパティを使用して、長期的なクエリは

client.Search<Document>(s => s 
    .Query(q => q 
     .Term(f => f.Location, "location") 
    ) 
); 

だろうと用語の集約以内に分析ではないプロパティを使用するために実行する

client.Search<Document>(s => s 
    .Size(0) 
    .Aggregations(a => a 
     .Terms("top_locations", ta => ta 
      .Field(f => f.Location.Suffix("raw")) 
     ) 
    ) 
); 
+0

だろう、あなたにサーをたくさんありがとうございました! –

+0

心配する必要はありません。 –