我无法在 Rails 应用程序中使用 Elasticsearch(和轮胎)突出显示。我可以成功索引 PDF 附件并查询它们,但我无法使突出显示工作。
对 ES 不太熟悉,所以不知道在哪里寻找故障排除。将从映射和 curl 查询开始,但请随时询问更多信息。
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',
:fields => {
:name => { :store => 'yes' },
:content => { :store => 'yes' },
:title => { :store => 'yes' },
:file => { :term_vector => 'with_positions_offsets', :store => 'yes' },
:date => { :store => 'yes' }
}
end
def to_indexed_json
to_json(:methods => [:attachment])
end
def attachment
if filename.present?
path_to_pdf = "/Volumes/Calvin/sample_pdfs/#{filename}.pdf"
Base64.encode64(open(path_to_pdf) { |pdf| pdf.read })
else
Base64.encode64("missing")
end
end
end
映射(通过 Curl):
$ curl -XGET 'http://localhost:9200/_mapping?pretty=true'
{
"articles" : {
"article" : {
"properties" : {
"attachment" : {
"type" : "attachment",
"path" : "full",
"fields" : {
"attachment" : {
"type" : "string"
},
"title" : {
"type" : "string",
"store" : "yes"
},
"name" : {
"type" : "string",
"store" : "yes"
},
"date" : {
"type" : "date",
"ignore_malformed" : false,
"store" : "yes",
"format" : "dateOptionalTime"
},
"content_type" : {
"type" : "string"
}
}
},
"content" : {
"type" : "string"
},
"created_at" : {
"type" : "date",
"ignore_malformed" : false,
"format" : "dateOptionalTime"
},
"filename" : {
"type" : "string"
},
"id" : {
"type" : "integer",
"ignore_malformed" : false
},
"published_on" : {
"type" : "date",
"ignore_malformed" : false,
"format" : "dateOptionalTime"
},
"title" : {
"type" : "string"
},
"updated_at" : {
"type" : "date",
"ignore_malformed" : false,
"format" : "dateOptionalTime"
}
}
}
}
}%
在 125 页索引 PDF 中带有“命中”的查询:
$ curl "localhost:9200/_search?pretty=true" -d '{
quote> "fields" : ["title"],
quote> "query" : {
quote> "query_string" : {
quote> "query" : "xerox"
quote> }
quote> },
quote> "highlight" : {
quote> "fields" : {
quote> "attachment" : {}
quote> }
quote> }
quote> }'
{
"took" : 1077,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.036417194,
"hits" : [ {
"_index" : "articles",
"_type" : "article",
"_id" : "13",
"_score" : 0.036417194,
"fields" : {
"title" : "F-E12"
}
} ]
}
}%
我期待这样的部分:
"highlight" : {
"attachment" : [ "\nLast Year <em>Xerox</em> moved their facilities" ]
}
谢谢你的帮助!
Edit2:调整查询(更改attachment
为attachment.file
)无济于事:
$ curl "localhost:9200/_search?pretty=true" -d '{
"fields" : ["title","attachment"],
"query" : {"query_string" : {"query" : "xerox"}},
"highlight" : {"fields" : {"attachment.file" : {}}}
}'
{
"took" : 221,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.036417194,
"hits" : [ {
"_index" : "articles",
"_type" : "article",
"_id" : "13",
"_score" : 0.036417194,
"fields" : {
"title" : "F-E12",
"attachment" : "JVBERi0xLjYNJeLjz9MNCjk4NSAwIG9iag08PC9MaW5lYXJpemVkIDEvTCA...\n"
}
} ]
}
}
Edit3(删除“字段”):
$ curl "localhost:9200/_search?pretty=true" -d '{
> "query" : {"query_string" : {"query" : "xerox"}},
> "highlight" : {"fields" : {"attachment" : {}}}
> }'
{
"took" : 1078,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.036417194,
"hits" : [ {
"_index" : "articles",
"_type" : "article",
"_id" : "13",
"_score" : 0.036417194, "_source" : {"content":"Real report","created_at":"2012-08-28T22:44:08Z","filename":"F-E12","id":13,"published_on":"2007-12-28","title":"F-E12","updated_at":"2012-08-28T22:44:08Z","attachment":"JVBERi0xLjYNJeLjz9MNCjk4NSAwIG9iag08PC9MaW5lYXJpemVkID...\n"
}
} ]
}
}
Edit4(来自 Attachment Type in Action 教程的映射):
$ curl -XGET 'http://localhost:9200/test/_mapping?pretty=true'
{
"test" : {
"attachment" : {
"properties" : {
"file" : {
"type" : "attachment",
"path" : "full",
"fields" : {
"file" : { #<== This appears to be missing
"type" : "string", #<== from my Articles mapping
"store" : "yes", #<==
"term_vector" : "with_positions_offsets" #<==
},
"author" : {
"type" : "string"
},
"title" : {
"type" : "string",
"store" : "yes"
},
"name" : {
"type" : "string"
},
"date" : {
"type" : "date",
"ignore_malformed" : false,
"format" : "dateOptionalTime"
},
"keywords" : {
"type" : "string"
},
"content_type" : {
"type" : "string"
}
}
}
}
}
}
}