/ / Správny spôsob zverejnenia výsledkov pružného vyhľadávania v meteoroch - mongodb, meteor, elasticsearch

Správny spôsob publikovania výsledkov vyhľadávania v Meteor - mongodb, meteor, elasticsearch

Mám kolekciu mongodb indexovanú v Elastic Search a chcem vrátiť dokumenty MongoDB zoradené podľa elastického vyhľadávania _score pre daný dotaz.

Som zmätený, prečo nižšie uvedená publikácia správne opakuje dokumenty a aktualizuje (ukážkové) skóre v každom dokumente:

Meteor.publish "docs", (params) ->
pub = @

Document.find({}, limit: 20).forEach (doc) ->
doc._score = 123 # some score
pub.added "documents", doc._id, doc

pub.ready()

Nižšie uvedené použitie klienta elastického vyhľadávania však nevracia výsledky a iterátor sa v skutočnosti nikdy ani nevykoná:

Meteor.publish "docs", (params) ->
pub = @

client.search
size: 20
body:
query:
filtered:
query:
multi_match:
fields:["body"]
query: query

.then (response) =>
results = response.body?.hits?.hits

ids = _.inject _.pluck(results, "_id"), (ids, id)->
ids.push({_id: id}); ids
, []

scores = getScores(results)

Document.find($or: ids).forEach (doc) ->
# Here is never reached.
doc._score = scores[doc._id]
pub.added "documents", doc._id, doc

, (error) ->
console.trace error if error

pub.ready()

Nebudem prekvapený, ak môj prístup bude ďaleko odtiaľto. Existuje lepší spôsob, ako to dosiahnuť?

odpovede:

1 pre odpoveď č. 1

Myslím, že stačí počkať, kým zavoláte pub.ready() dovtedy, kým sa neodošle „úvodná úplná snímka sady záznamov“. Takže ... na konci spätného volania o úspešnom vyhľadávaní.

dokumenty: http://docs.meteor.com/#publish_ready


-1 pre odpoveď č. 2

na strane meteorového servera existuje doplnkový klient Elasticsearch. Pridané metódy na jednoduché spravovanie kolekcií rieky mongo a metóda meteoru na vyhľadávanie z klientskej strany.

pozri sa sem: https://github.com/andrewreedy/meteor-elasticsearch