2012-09-25 61 views
3

我是新來的搜索,並且在解析映射中提升字段的文檔時遇到問題。Elasticsearch映射配置文件增強字段

我想實現一個簡單的提升,其中一些文章的標題比與文章相關的標籤更重要。

下面是在配置的嘗試,我已經把配置/ [INDEX_NAME] [some_name]以.json /:

{ 
    "[type]": { 
     "properties": { 
      "_boost": { 
       "name": "title", 
       "null_value": 2.0 
      } 
      "title": { 
       "type": "string" 
      } 
     } 
    } 
} 

我可以告訴該文件被讀,因爲從以前的嘗試錯誤信息在這個文件。我也一直刪除索引並在兩次嘗試之間重新創建它,以便它使用這個映射。

這項工作?它不會給出任何錯誤消息,但我無法判斷_search的輸出或get _mapping API調用是否有效。

這裏是_mapping調用的結果:

{ 
    "[type]" : { 
     "properties" : { 
      "title" : { 
       "type" : "string" 
      } 
      "tags": { 
       "type" : "string" 
      } 
     } 
    } 
} 

回答

10

看一看在boost field documentation的例子。

升壓字段映射(施加的根對象上)允許定義 升壓場映射,其中它的內容將控制文件

的增壓水平 下面的映射定義了一個名爲字段_boost。如果_boost字段本身存在於索引的JSON文檔中,則其值將控制索引文檔的提升級別。

{ 
    "tweet" : { 
     "_boost" : {"name" : "_boost", "null_value" : 1.0} 
    } 
} 

沒什麼特別的例子只是告訴elasticsearch考慮_boost領域,因爲它是和給一個默認值1.0它時不存在。但是您正在爲特定文檔定義提升:這意味着當文檔匹配查詢時,其分數將根據您應用於root object_boost字段映射進行提升。這與提升現場水平無關。

對於您的映射,您應該說title字段的內容應該用作_boost,並且您要給出默認的_boost值2.0

"_boost": { 
    "name": "title", 
    "null_value": 2.0 
} 

這是沒有意義的,因爲標題包含文本,而且它不是我想要的。

title字段中有更多重要的匹配有不同的方法。

據我從你可以做你這樣的映射文檔理解:

{ 
    "[type]" : { 
     "properties" : { 
      "title" : { 
       "type" : "string", 
       "boost" : 2.0 
      } 
      "tags": { 
       "type" : "string" 
      } 
     } 
    } 
} 

老實說我還沒有嘗試過了,以前從來沒有使用過,但Lucene的確實允許您指定在指數時間每場上漲。提升成爲該領域的規範的一部分,並在該特定領域有匹配時予以考慮。所以,這將是你正在尋找的。

無論如何,我個人會在查詢時間而不是索引時間進行提升,以便您不需要修改映射,也可以在不進行重新索引的情況下更改權重。比如,你可以使用一個query string和搜索在不同的領域給他們這樣的不同的權重:

{ 
    "query_string" : { 
     "fields" : ["title^2", "content"], 
     "query" : "this AND that OR thus" 
    } 
} 

你需要考慮的是,查詢字符串查詢被解析,並允許您使用lucene query syntax帳戶。

此外,您可以使用bool query將不同的查詢組合在一起。你可以表達了對於冠軍的比賽升壓用含有應該例如term query和它的特殊升壓這樣的條款:

"should" : [ 
    { 
     "term" : { "title" : "your query", "boost" : 2.0 } 
    } 
] 

你可以使用任何你想要查詢作爲應節。如果你用術語查詢,你需要記住它沒有被分析。

+0

我讀過一些其他的SO帖子,認爲索引時間提升會更有效率。但是在查詢中調整增強設置的能力可能是更好的方法。感謝您的明確解釋。 – richard

+0

是的,如果你在查詢時增加了一些性能成本。我更新了關於在現場級別提升的問題,因爲我擡起頭來,它確實按照您的預期工作。這只是選擇你喜歡的內容:索引時間或查詢時間。 – javanna

+0

根據Clinton Gormley和Zachary Tong的書「Elasticsearch:權威指南」,不建議使用索引時間提升。例如,如果您需要更改索引,則需要重新索引所有文檔。另外,如果索引時間提升的字段具有多個值,則每個值的提升量都會自乘,這會顯着增加該字段的權重,這不是您通常想要的。 [參考](https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html) – lao