Voglio le query per restituire un punteggio che viene calcolato come:Come calcolare il punteggio in base al numero di termini di ricerca in elasticsearch?
verificarsi di ogni termine di ricerca nel titolo + Descrizione/numero di termini di ricerca
ad esempio
EbSearch.add [
new_job(id: 1, title: "Java Programmierer",
description: "Java Programmierer")
]
res = EbSearch.search("Java Programmierer").results.first.score.should == 4
nel momento in cui output 8, perché fa la query per ogni termine e lo riassume. Potrei semplicemente dividere in seguito, ma non ho i termini della query analizzati, quindi i composti potrebbero rovinare il punteggio.
La query è strutturato come segue:
search = Tire.search index_name do
query do
dis_max do
query { string query, fields: ['title^3', 'description.with_synonyms^0.5'], use_dis_max: false, default_operator: "OR" }
query { string query, fields: ['title^3', 'description.without_synonyms'], use_dis_max: false, default_operator: "OR"}
end
end
end
Qualsiasi idea di come potrei risolvere questo problema è molto apprezzato.
EDIT
ho capito che non fornito abbastanza contesto.
Ecco alcuni altri frammenti che ho già elaborato. Ho scritto un CustomityProvider personalizzato per disabilitare idf e normalizzazione. https://gist.github.com/outsmartin/6114175
Il codice pneumatico completo si trova qui https://gist.github.com/6114186. È un po 'più complicato dell'esempio, ma dovrebbe essere comprensibile.
Per composti intendi come la frase di ricerca "ricerca elastica" potrebbe essere tokenizzata in 2 token? Volete dividerlo per 2 allora? – ramseykhalaf
Ad esempio, ma poiché ho molti termini in tedesco, devo dividere anche "Javaprogrammierer" in Java e Programmierer. Poiché la query viene eseguita con tutti i termini, voglio che il punteggio rimanga tra 0 e 4 nell'esempio. – outsmartin
Sono ancora un po 'confuso ... Dalla tua descrizione di cui sopra, ho capito che la ricerca di "Java Programmierer" dovrebbe avere un punteggio di: (4: occorrenza di ogni termine di ricerca nel titolo + descrizione)/(2: numero di termini della query) = 2. Ma tu dici che vuoi che il punteggio sia 4. Sono un po 'confuso. – ramseykhalaf