簡體   English   中英

ElasticSearch並未使用所有字段(字符串數組)進行搜索

[英]ElasticSearch not using all fields (array of strings) for search

我剛剛開始使用ES的Rails,但遇到了一些我不了解的問題:

我有一個Artist模型(為示例簡化):

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

  # simplified to get the idea
  def get_aliases
    ["alias1", "alias2"]
  end

  def as_indexed_json(options = {})
   self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, :get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
  end
end

我的問題是ES搜索沒有使用get_aliases屬性給出結果:僅搜索'name'屬性:

我有一個開發人員。 數據庫中有幾位藝術家,其中沒有一個帶有字符串“ Phil”,但是一個別名帶有“ Phillip”。 當我嘗試使用Artist.__elasticsearch__.search('phil').count我得到0個結果。

我已經嘗試過Artist.all.__elasticsearch__.import得到:

=> 0

Artist.__elasticsearch__.refresh_index! 得到:

=> {"_shards"=>{"total"=>10, "successful"=>5, "failed"=>0}}

(不確定這兩個命令之間的區別是什么...),但是沒有運氣:/

我的問題是否來自將字符串數組用作屬性的事實? 我應該以不同的方式索引它嗎?

歡迎任何想法/幫助!

編輯:
我正在使用
寶石'elasticsearch-rails','〜> 0.1.7'
gem'elasticsearch-model','〜> 0.1.7'

並且安裝的ElasticSearch服務器是1.7.1

多虧了Omarvelous的評論,我才能正常工作,區別在於as_indexed_json方法:

def as_indexed_json(options = {})
  self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, :get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
end

應該是(請注意get_aliases NOT'only'數組中的符號):

def as_indexed_json(options = {})
  self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
end

兩種實現(符號或實際方法)在控制台中都可以得到相同的結果:

irb(main):016:0> Artist.find(7).as_indexed_json
=> {"name"=>"Mick Jagger", "get_aliases"=>["Michael Philip Jagger"], "get_tracks"=>[]}

但是在ES中,這是一個完全不同的故事!

如果有人能很好地學習如何通過Rails請求ES,我將不勝感激;)

再次感謝Omarvelous;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM