2017-01-16 29 views
2

我在ElasticSearch中的字段屬性有點掙扎,特別是因爲事情已經改變了一點點5.x(我移植我們的代碼)。Elasticsarch C#嵌套[5.x]屬性

一個例子是這樣的:

[Text(Index = false)] 
    public string Id      { get; set; } 
    [Keyword] 
    public string Tags      { get; set; } 
    [Text] 
    public string Title      { get; set; } 

我有一堆像這樣的領域,但我試圖找出最好的屬性爲遵循這一字段:

  • 文本字段爲可搜索AS-IS,不解釋(例如字符串ID)。我希望能夠搜索確切的字符串,沒有別的
  • 一個英文文本,我希望能夠對單詞和接近度進行全面搜索。
  • 一個枚舉,其中的值可以存儲爲一個有限的字符串列表,我需要使用它作爲搜索條件
  • 標籤這是一個單詞列表,但不形成句子;我需要能夠通過這些
  • 數字是搜索存儲,而不是搜索
  • 日期將被存儲並搜索
  • 日期將被存儲而不是搜索

很多帖子都提到了ES的文檔,但我真的沒有看到屬性文檔中的任何清晰的;它似乎是與已經瞭解系統的人一起寫的。如果任何人有像屬性細分和他們的效果(存儲,搜索,分析等),這將是奇妙的Excel表格

回答

7

文檔將只會隨着時間的推移, contributions are most appreciated :)

回答您的問題:

  • 的文本字段是搜索的AS-IS,不解釋(例如一個字符串ID)。我希望能夠搜索完全匹配的字符串,沒有別的

使用KeywordAttribute,創建與Keyword data type的字段。其中,我希望能夠做到單詞和接近全搜索

  • 英語文本。

使用TextAttribute,其產生與所述Text data type的字段。默認情況下,使用的分析儀將是Standard Analyzer。根據您的域名和搜索條件,您可以使用不同的分析儀,預先配置或自定義。

  • 其中值可以作爲字符串存儲的有限列表的枚舉,我需要使用它作爲搜索條件

,如果你想完全匹配您可以使用KeywordAttribute這裏。但是,您可能想要不區分大小寫地搜索,在這種情況下,您可以使用TextAttribute以及由Keyword tokenizerLowercase token filter組成的自定義分析器。

  • 標籤這是一個單詞列表,但不形成句子;我需要能夠通過這些

進行搜索,如果你正在尋找非結構化搜索,然後使用TextAttribute

- 值將被存儲,而不是搜索

使用映射到numeric data typesNumberAttribute,與對應於所述numeric類型的POCO例如NumberType對於Int32int),請使用NumberType.Integer。對於要存儲在_source但不可搜索的號碼,請設置Index=false

[Number(NumberType.Integer, Index = false)] 
public int MyNumber { get;set; } 

Index對應index的數字類型。

-Dates要被存儲和檢索的

使用對應於Date data type

-Dates將被存儲,但不搜索的DateAttribute

使用DateAttributeIndex=false

看看documentation for the mapping parameters that are available to field mappings。 Elasticsearch文檔中的參數名稱在NEST中以Pascal-cased名稱公開。

+0

這是非常有用的,非常感謝拉斯!我認爲由於C#驅動程序是它自己的東西,平行文檔會產生困難之一;從長遠來看,如果.NET樣本都在C#和VB中,並且這兩個版本都在同一個文檔中,那麼它是否有意義呢?在他們的情況下,您可以切換來決定要查看哪種語言,但這些頁面是相同的,這對搜索索引也更好。 – Thomas