2012-10-16 18 views
1

我想從另一個模塊添加特定模型的設置和映射。那可能嗎?如果是,請幫助我如何做到這一點。我嘗試這樣做:使用輪胎的模塊映射和設置

文章型號:

class Article < ActiveRecord::Base 
    include SearchArticle 
end 

新模塊:

module SearchArticle 

    include Tire::Model::Search 
    settings :analyzer => { 
      :custom_analyzer => { 
       'tokenizer' => 'uax_url_email' 
      } 
    } do 
    mapping do 
     indexes :name, :boost => 10 
     indexes :email, :analyzer => 'custom_analyzer', :boost => 10 
    end 
    end 

end 

但不獲取創建索引。我收到以下錯誤。

[2012-10-16 11:42:38,023][WARN ][cluster.metadata   ] [Inza] [search_article] failed to create 
org.elasticsearch.index.mapper.MapperParsingException: mapping [search_article] 
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:262) 
at org.elasticsearch.cluster.service.InternalClusterService$2.run(InternalClusterService.java:208) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:680) 

Caused by: org.elasticsearch.index.mapper.MapperParsingException: Analyzer [custom_analyzer] not found for field [email] 
at org.elasticsearch.index.mapper.core.TypeParsers.parseField(TypeParsers.java:76) 
at org.elasticsearch.index.mapper.core.StringFieldMapper$TypeParser.parse(StringFieldMapper.java:124) 
at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:261) 
at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parse(ObjectMapper.java:217) 
at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:161) 
at org.elasticsearch.index.mapper.MapperService.parse(MapperService.java:364) 
at org.elasticsearch.index.mapper.MapperService.add(MapperService.java:186) 
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:259) 
... 4 more 

回答

3

是的,這是可能的 - 但不是我的問題,做的方式。這裏的推移輪胎寶石主人Karmi

建議的答案完整的答案,請參閱您的答覆@Axsuul this

module Searchable 

    def self.included(base) 

    p "Included in #{base}" 

    base.class_eval do 
     include Tire::Model::Search 

     tire do 
     mapping do 
      indexes :title, type: 'string', analyzer: 'snowball' 
     end 
     end 
    end 
    end 
end 

class Article < ActiveRecord::Base 
    include Searchable 
end 
0
module SearchArticle 
    include Tire::Model::Search 
    include ActiveSupport::Concern 

    included do 
    settings :analyzer => { 
       :custom_analyzer => { 
        'tokenizer' => 'uax_url_email' 
       } 
     } do 
     mapping do 
      indexes :name, :boost => 10 
      indexes :email, :analyzer => 'custom_analyzer', :boost => 10 
     end 
    end 
    end 
end 
+0

謝謝......不過,這似乎並沒有爲我工作。我使用self.included(base)發送了映射和設置。這部分爲我工作。但是,索引不會被創建。我在做這個工作。一旦我破解,我會在這裏爲其他人發佈整個代碼。 –