2013-10-15 47 views
0

用下面文件設置共同IDF得分與elasticsearch

curl -XPUT "http://localhost:9200/test/books/1" -d '{ 
    "title": "Bacon Dishes", 
    "tags": ["bacon", "cooking"] 
}' 

curl -XPUT "http://localhost:9200/test/books/2" -d '{ 
    "title": "Beyond Bacon", 
    "tags" : ["cooking"] 
}' 

而下面查詢

curl -XGET "http://localhost:9200/test/books/_search?pretty=true&search_type=dfs_query_then_fetch" -d ' { 
    "explain" : true, 
    "query" : { 
    "multi_match" : { 
     "query" : "bacon beyond", 
     "fields" : ["title^2","tags^1"] 
    } 
    } 
}' 

解釋計劃表明,分數標題使用idf(docFreq=2, maxDocs=2)進行計算,而標記的評分(如果存在)則使用idf(docFreq=1, maxDocs=2)進行計算。

如果有100本書的標題中有50個「培根」,而標籤中只有1個「培根」,但標題中沒有「培根」,這會成爲一個問題(至少對我們來說)。使用上面的查詢,儘管標題被提升,但標籤中帶有「燻肉」的文檔將得分更高。

我想對於分數計算兩個在第一個例子中的標籤和標題字段是:​​

idf(docFreq=2, maxDocs=2) 

也就是說,我想得分計算使用期限的docFreq所有多匹配查詢中的字段。這可能嗎?

+1

我只會增加你給標題的提升,足以讓它比標籤更重要。我不認爲你想要實現自己的自定義相似性,並將其插入elasticsearch :) – javanna

+0

你是對的,我絕對不想做這樣的事情!你會碰巧知道這裏的任何選項/設置是否啓用我正在尋找的行爲? http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-similarity.html – andy

+0

沒有,你就必須使標題重高,僅此而已。足夠高以至於它可以使其與標籤相比較重要。當然,這是微調,這需要有一個真正的指數,真實的數據,實際的查詢... – javanna

回答

1

我只是增加了你給標題的提升,足以讓它比標籤字段更重要。

我不認爲你想要實現自己的自定義相似性,並將其插入elasticsearch。

請記住,添加適當的權重,領域與提高玩耍是微調,這需要有一個真正的指數,真實的數據,實際查詢的情況發生。