2015-03-05 8 views
6

Sto utilizzando l'API di ricerca e ora devo aggiungere lo completion suggester, sto usando elasticsearch-rails gem.rails - suggerimento completamento elasticsearch e API di ricerca

Quando cerco un articolo, tutto funziona http://localhost:9200/articles/_search

"query": { 
    "multi_match": { 
     "query": "test", 
     "fields": [ 
     "title", "tags", "content" 
     ] 
    } 
    } 
} 

Ma dal momento che ho implementato il suggester completamento ho dovuto modificare as_indexed_json per farlo funzionare, ma ora l'API di ricerca non funziona più, solo i suggerimenti.

Ecco il mio articolo modello:

def self.search(query) 
    __elasticsearch__.search(
     { 
      query: { 
       multi_match: { 
        query: query, 
        fields: ['title', 'content', 'tags'] 
       } 
      } 
     }) 
end 

     def self.suggest(query) 
     Article.__elasticsearch__.client.suggest(:index => Article.index_name, :body => { 
      :suggestions => { 
       :text => query, 
       :completion => { 
        :field => 'suggest' 
       } 
      } 
     }) 
     end 

     def as_indexed_json(options={}) 
     { 
      :name => self.title, 
      :suggest => { 
       :input => self.title, 
       :output => self.title, 
       :payload => { 
        :content => self.content, 
        :tags => self.tags, 
        :title => self.title 
       } 
      } 
     }.as_json 
     end 

E 'possibile avere _search e _suggest lavorare insieme con lo stesso modello?

+0

Quindi, come si presenta la mappatura? – Tobi

risposta

5

Sto solo scavando in elasticsearch, ma, per quanto ho capito, è possibile aggiungere ciò che si aveva prima di modificare nella funzione serializzatore e ricreare indici, vivranno insieme bene nel db. Per esempio:

def as_indexed_json(options={}) 
     { 
      :name => self.title, 
      :suggest => { 
       :input => self.title, 
       :output => self.title, 
       :payload => { 
        :content => self.content, 
        :tags => self.tags, 
        :title => self.title 
       } 
      } 
     }.as_json.merge(self.as_json) # or the customized hash you used 

Per evitare la ridondanza indici si può guardare aliases and routing.

+0

grazie, funziona! – user2037696