탄성 검색에서 타이어 보석을 사용하여 첨부 파일 유형을 색인화하는 데 어려움이 있습니다. 첨부 파일 type
을 올바르게 설정할 수 없습니다.Tire로 Elasticsearch의 첨부 파일을 어떻게 색인합니까?
타이어 젬에서 참조한 ActiveModel Integration example을 가져다가 필드를 레코드와 색인을 생성하려는 로컬 파일 시스템의 참조 이름에 추가했습니다. -
#app/models/article.rb
class Article < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :title, :content, :published_on, :filename
mapping do
indexes :id, :type =>'integer'
indexes :title
indexes :content
indexes :published_on, :type => 'date'
indexes :attachment, :type => 'attachment'
end
def to_indexed_json
to_json(:methods => [:attachment])
end
def attachment
if filename.present?
path_to_pdf = "/Volumes/Disk41402/test_proj/sample_pdfs/#{filename}.pdf"
Base64.encode64(open(path_to_pdf) { |pdf| pdf.read })
end
end
end
FWIW PDF 파일이 색인에 추가 된 것으로 나타납니다이 "type" : "attachment"
$ curl -XGET 'http://localhost:9200/articles/_mapping?pretty=true'
{
"articles" : {
"article" : {
"properties" : {
"attachment" : {
"type" : "string"
},
"content" : {
"type" : "string"
},
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"filename" : {
"type" : "string"
},
"id" : {
"type" : "long"
},
"published_on" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"title" : {
"type" : "string"
},
"updated_at" : {
"type" : "date",
"format" : "dateOptionalTime"
}
}
}
}
}
내가 해봤해야 할 때
$ curl -XGET 'http://localhost:9200/articles/_all/2?pretty=true'
{
"_index" : "articles",
"_type" : "article",
"_id" : "2",
"_version" : 1,
"exists" : true, "_source" : {"content":"Consectetur adipisicing elit, sed do eiusmod tempor incididunt. working?","created_at":"2012-06-21T17:19:03Z","filename":"sample2","id":2,"published_on":"2012-06-20","title":"Two","updated_at":"2012-06-28T00:00:59Z","attachment":"JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAg\nUiAvRmlsdG... ... ...4+CnN0YXJ0eHJlZgo4\nNTAzCiUVPRgo=\n"
}
}
그러나 첨부 파일 유형은 여전히 "type" : "string"
입니다 rake environment tire:import CLASS=Article FORCE=true
인덱스를 다시 작성하지만 유형은 문자열로 유지됩니다. 아무도 내가 어 지르는 곳을 보지 않니?
로그인 ('어떤 핸들러가'!? 의미 정확히 확인되지 않음) : 당신이 mapper attachment 플러그인
[2012-06-28 17:30:58,711][INFO ][cluster.metadata ] [Kofi Whitemane] [articles] deleting index
[2012-06-28 17:30:58,765][WARN ][cluster.metadata ] [Kofi Whitemane] [articles] failed to create
org.elasticsearch.index.mapper.MapperParsingException: mapping [article]
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:263)
at org.elasticsearch.cluster.service.InternalClusterService$2.run(InternalClusterService.java:211)
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: No handler for type [attachment] declared on field [attachment]
at org.elasticsearch.index.mapper.object.ObjectMapper$TypeParser.parseProperties(ObjectMapper.java:259)
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:271)
at org.elasticsearch.index.mapper.MapperService.add(MapperService.java:174)
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:260)
... 4 more
[2012-06-28 17:30:58,805][INFO ][cluster.metadata ] [Kofi Whitemane] [articles] creating index, cause [auto(bulk api)], shards [5]/[1], mappings []
[2012-06-28 17:30:58,891][INFO ][cluster.metadata ] [Kofi Whitemane] [articles] update_mapping [article] (dynamic)
예! 그거였다! 나는 그것을 설치했지만 0.19.6으로 업데이트 할 때 플러그인 폴더가 타기 위해 오지 않았다. 바보 나! – Meltemi