2015-02-11 59 views
0

最接近的比賽我有一個ActiveRecord::Base模型,看起來像這樣分數在Elasticsearch

class ArtistGroup < ActiveRecord::Base 
    include Elasticsearch::Model 
    include Elasticsearch::Model::Callbacks 

    FT_REDIS_KEY = "agft" 
    has_many :artists 

    settings index: { number_of_shards: 5 } do 
    mappings dynamic: 'false' do 
     indexes :normalized_name, analyzer: 'english' 
     indexes :name, analyzer: 'english' 
    end 
    end 

    def as_indexed_json(options={}) 
    as_json(only: ['normalized_name', 'id', 'name']) 
    end 
.... 

當我通過.search('haim')搜索我想的名字文檔Elasticsearch::Model:「哈伊姆」被別人像以前那樣先返回「Haim的Danielle Haim」,我怎樣才能控制ES查詢以最接近的比賽得分?

回答

0

Elasticsearch默認返回按相關性排序的結果(即每個文檔的分數)。

該分數的計算方式是基於一組基本規則並結合一些查詢特定規則。在Elasticsearch使用

標準相似性算法被稱爲術語頻率/逆文檔頻率,或TF/IDF,它採用以下因素考慮在內:

  • 期限頻率:多久的術語出現在場?經常更多,更相關。包含五個提到的 相同術語的字段更可能與只包含 的字段相關。
  • 逆文件頻率:每個術語 在索引中出現的頻率如何?越頻繁,越不相關。條款 出現在許多文件中的權重低於更多不常見的 條款。
  • 字段長度規範:字段有多長?時間越長,該字段中的單詞就越不可能相關。出現在短標題字段中的術語 承載比長內容字段中出現的相同術語更多的權重。

個別查詢可能會將TF/IDF分數與其他因素(例如短語查詢中的鄰近度或模糊查詢中的詞語相似度)結合起來。

有關相關性的完整說明,請參閱此處:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/sorting.html