2016-04-11 15 views
0

ES sonuçlarımı 2 alana göre sıralamaya çalışıyorum: aranabilir ve yıl.elasticsearch sıralama türüne - aynı alan aranabilir ama farklı puan?

benim Raylar app haritalama:

# mapping 
    def as_indexed_json(options={}) 
    as_json(only: [:id, :searchable, :year]) 
    end 

    settings index: { number_of_shards: 5, number_of_replicas: 1 } do 
    mapping do 
     indexes :id, index: :not_analyzed 
     indexes :searchable 
     indexes :year 
    end 
    end 

sorgusu:

@records = Wine.search(query: {match: {searchable: {query:params[:search], fuzziness:2, prefix_length:1}}}, sort: {_score: {order: :desc}, year: {order: :desc}}, size:100) 

sorguda ilginç şey:

sort: {_score: {order: :desc}, year: {order: :desc}} 

sorgu ile iyi çalışıyor düşünüyorum 2 sıralama param. Benim sorunum, aynı ada sahip 2 belge için aynı değil (aranabilir alan).

Örneğin, ben "şaraphane" Arıyorum:

enter image description here

Sen aranabilir alan aynı olsa bile, çok farklı bir skor görebilirsiniz. Sorunun kimlik alanına bağlı olduğunu düşünüyorum (aslında bir UUID). Bu ID alanının skoru etkilediği anlaşılıyor. Ancak şema eşlememde, kimliğin analiz edilmemesini yazdım ve ES sorgumda SADECE kimliğine değil de "aranabilir" alanına arama yapmasını istiyorum.

Aynı alanlar için aynı puanı matematikte özledim? her kırığın, bağımsız bir şekilde hesaplandığı için

+1

sen denediniz [açıklamak] (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-explain.html)? Skorun nasıl hesaplandığına dair bir ipucu verebilirim. – DrTyrsa

+0

Hayır. Açıklamaya çalışamıyorum. Ancak, testler yaptım: eğer 'as_json'dan (sadece: [: aranabilir,: yıl]) 'kimliğini kaldırsaydım, skor aynıdır. Yani, eminim ki ID skoru değiştiriyor. Puanlamayı etkilemeden ID nasıl indekslenir? –

+0

Belki de kimliğin endekslenmesini kaldıracağım çünkü ES belgeleri eşleştirmek için aynı kimliği kullanıyor, bu yüzden gereksiz mi? –

cevap

1

Sonuçlar, farklı (aslında, skor yıl sonra sıralamak yarar cos puanları aynı alanlar için farklı değildir). Daha fazla bilgi için See here.

İlgili konular