2016-08-02 90 views
0

我一直在使用ElasticSearch來構建搜索引擎,我有興趣手動更改每個術語的IDF(反向文檔頻率)以匹配可以測量的術語來自Google Books unigrams。瞭解ElasticSearch中的增強功能

爲了做到這一點我打算做以下幾點:

1)僅使用1個碎片(因此間接火力不計算爲每一個碎片,他們是「全球性」)

2)獲取ttf(總詞頻,這是用來計算間接火力)在我的索引

curl -XGET 'http://localhost:9200/index/document/id_doc/_termvectors?pretty=true' -d '{ 
    "fields" : ["content"], 
    "offsets" : true, 
    "term_statistics" : true 
}' 

3運行此查詢每一份文件,每學期)使用谷歌圖書的單字組模式「重新調整」的ttf爲每術語。

問題是,一旦我找到了我必須用於每個術語的「推動」因素,如何在查詢中使用它?

例如,讓我們考慮這個例子

"query": 
{ 
    "bool":{ 
     "should":[ 
      { 
       "match":{ 
        "title":{ 
         "query":"cat", 
         "boost":2 
        } 
       } 
      }, 
      { 
       "match":{ 
        "content":{ 
         "query":"cat", 
         "boost":2 
        } 
       } 
      } 
     ] 
    } 
} 

這是否意味着,「貓」一詞的間接火力將是推動/乘以2倍?

此外,如果不是搜索一個單詞我有一個句子會發生什麼?這是否意味着每個單詞的IDF將被提升2?

我試圖理解boost參數(https://www.elastic.co/guide/en/elasticsearch/guide/current/query-time-boosting.html)和t.getBoost()的作用,但這似乎有點令人困惑。

回答

0

用於升壓時,多查詢子句,例如查詢:

{ 
    "bool":{ 
     "should":[ 
      { 
       "match":{ 
        "clause1":{ 
         "query":"query1", 
         "boost":3 
        } 
       } 
      }, 
      { 
       "match":{ 
        "clause2":{ 
         "query":"query2", 
         "boost":2 
        } 
       } 
      }, 
      { 
       "match":{ 
        "clause3":{ 
         "query":"query1", 
         "boost":1 
        } 
       } 
      } 
     ] 
    } 
} 

在上面的查詢,這意味着clause1clause3重要的三倍,clause2clause2兩次重要的是,它不是簡單地乘以3,2,因爲計算得分時,因爲有歸一化爲得分。

,如果你還只是一個查詢子句查詢與boost,這是沒有用的。

使用升壓的使用場景:

一組與冠軍內容字段設置頁面文件。

您要搜索冠軍內容一些條款,你認爲冠軍內容更重要的,當搜索這些文檔。所以你可以設置標題查詢子句提升超過內容。比如,如果你的查詢命中一個文檔通過冠軍領域,一個擊文件由內容場,並且要事先打冠軍領域的文檔的內容領域文件。所以提升可以幫助你做到這一點。

+0

感謝您的回答!不過,我想知道是否有辦法提升特定詞彙。在ElasticSearch指南中,他們提到't.getBoost()'來做到這一點,但我不明白如何在實踐中使用它。 – Brian

+0

@Brian,'t.getBoost()'表示當我們在查詢中設置'boost'時,計算函數將通過't.getBoost'這個方法得到'boost'。 'boost'是爲了增加查詢子句的權重, – chengpohi

+0

好的,謝謝!但是分數中的「提升」究竟如何?這是Lucene中得分的描述(https://www.elastic.co/guide/en/elasticsearch/guide/current/practical-scoring-function.html),但我不清楚當更多的時候會發生什麼而不是查詢中的一個詞。 – Brian