[英]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.