2012-11-29 46 views

回答

24

默認情況下,所有字段都在_all特殊字段中編入索引,該字段提供所謂的catchall功能。但是,你可以在你的映射爲每個字段指定您是否希望將其添加到_all場與否,通過include_in_all選項:

"person" : { 
    "properties" : { 
     "name" : { 
      "type" : "string", "store" : "yes", "include_in_all" : false 
     } 
    } 
} 

上面的例子禁用名稱字段,從而贏得了默認行爲不會成爲_all字段的一部分。如果禁用它

"person" : { 
    "_all" : {"enabled" : false}, 
    "properties" : { 
     "name" : { 
      "type" : "string", "store" : "yes" 
     } 
    } 
} 

你的領域仍然會被索引:

否則,如果你不需要_all場在所有特定類型,你可以像這樣再次在映射禁用它,分開,但您不會擁有_all提供的catchall功能。然後您需要查詢您的特定字段,而不是依賴_all專業字段,就是這樣。實際上,當您查詢並且未指定字段時,elasticsearch將查詢引擎下的_all字段,除非您覆蓋要查詢的默認字段。

+0

謝謝!所以我可以禁用'_all',因爲我沒有使用該功能,希望這會減小索引的大小。而且,如果我理解得很好,那麼減少索引大小的唯一方法就是在不搜索的字段上指定'not_analyzed'。 – Michael

+2

嗯,這不僅僅是改變索引大小......它改變了數據索引的方式。如果你不分析一個字段,它將包含一個單一的標記。不會使用標記器或標記過濾器。如果它包含一個句子(用空格等),爲了匹配它,你需要查詢整個確切的句子。如果您從不查詢只設置indexed = false的字段。 – javanna

+0

是的,這就是我的想法。感謝您的解釋。我有我的證件,如「說明」或「鏈接」,我永遠需要尋找的所以它是一種資源的浪費,分析他們的一些領域。而且我測試了運行在內存中的整個指數('{「指數」:{「store.type」:「記憶」}}'),所以指數的大小將成爲一個重要的因素。 – Michael

6

每個字符串字段在映射配置中都有index參數,其中defaults toanalyzed。這意味着除了_all字段外,每個字段都只被索引。

而對於_all field它在基準說:

默認情況下,它被啓用,所有領域都包含在它的易用性。

所以,你必須指定(如果_all場啓用)字段完全禁用索引:

"mappings": { 
     "your_mapping": { 
      "properties": { 
       "field_not_to_index": { 
        "type": "string", 
        "include_in_all": false, 
        "index": "no" 
       } 
      } 
     } 
    } 

對於應就是否要查詢的字段包括他們在_all場(使用"index": "no"節省資源),如果您通過_all字段進行查詢,或者如果您僅在這些字段上查詢,請使用具有任何正值的index參數(analyzednot_analyzed),並禁用_all字段以節省資源。

2

下面是一個重要的文檔頁面,瞭解彈性搜索 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html

有關問題的指標設置,最好你應該設置「指數」標誌,沒有在字段屬性。

+1

在這一環節中,例如顯示「指標」:「not_analyzed」。但我認爲索引和分析在ES中是不同的概念? '不'是與'not_analyzed'不同的設置嗎?請澄清。 – szeitlin

+2

'analyzed' 首先分析字符串,然後建立索引。換句話說,請將此字段索引爲全文。 'not_analyzed' 指數這一領域,所以它是搜索,但作爲指定索引值完全。不要分析它。 'no' 不索引這個領域的。該字段不可搜索。 – Tjorriemorrie

相關問題