2016-07-27 48 views
2

我的問題: 我有一個字符串屬性的索引,我在其上執行查詢和聚合。我希望對那些正在分析的財產進行條款查詢,並且對那些財產進行彙總並不進行分析。在以前的elasticsearch版本中,有一個多字段映射,但是自從該庫的2.0版本以後,它就沒有了。我怎樣才能做到這一點?Elasticsearch.net v。2.3+庫(c#)中多場映射的替代方案?

旁註: 我想,爲了避免重複,物業在我的索引和標記爲分析,另一種爲不分析的副本之一,因爲它似乎並不像efficent解決方案。

我使用的庫(c#): Elasticsearch.net 2.3.3和NEST 2.3.3。

歡迎任何建議。

回答

3

multi_field映射在Elasticsearch 2.x和NEST 2.x中仍然存在;這裏是一個例子

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屬性被映射爲與施加於它的默認Standard分析器一個multi_field;這將位於索引內的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

不用擔心,高興地幫助:) –