将可检索的元数据添加到太阳黑子solr中的多个字段

时间:2013-06-30 19:40:31

标签: ruby-on-rails ruby-on-rails-3 solr ruby-on-rails-3.2 sunspot-solr

我将使用从太阳黑子solr文档中获取的实际示例。假设我们有评论的帖子,然后帖子索引其标题和评论:

class Post < ActiveRecord::Base
  searchable do
    text :title
    text :comments do
      comments.map { |comment| comment.body }
    end
  end
end

我想知道的是我们搜索帖子时匹配的评论(如果匹配使用评论字段),那么我可以向用户显示与搜索匹配的帖子和评论。如果有多个比赛,请根据比分获得最佳比赛。我正在考虑将id作为元数据添加到评论字段中,但我找不到这样做的方法。

有没有办法附加某种非索引元数据(在这种情况下是每条评论的id),当使用该字段匹配时可以检索到这些元数据?还有其他建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

恕我直言,你应该在不同的文件上存储帖子和评论。您可以将帖子ID放在评论文档中,这样您就可以知道哪个帖子拥有每条评论。

我的字段建议是:

id - if you have the risk of getting the same id for a comment and a post, you should use some kind of prefix at the document id. In this case, you have another field to store the original id
_type (post or comment) - 
post_id - this field will store the post id, a comment is child. It will be empty at the post documents
title (empty for comments, maybe?)
content - the actual text a comment or post has
text - the field that contains all text you want to query in a document, via copyfield (only if you don't want to boost the individual fields)
<any other fields you may need>

您可以查询您的帖子或评论,只需执行?q = text:“foo”,您将检索与foo匹配的所有文档。然后,您可以查询返回的post_id,或者您可以尝试某种类型的连接。看看http://wiki.apache.org/solr/Join。你会做一些像?q =({join from = post_id to = id} text:“foo”)(+ text:foo + _type:post)