我将使用从太阳黑子solr文档中获取的实际示例。假设我们有评论的帖子,然后帖子索引其标题和评论:
class Post < ActiveRecord::Base
searchable do
text :title
text :comments do
comments.map { |comment| comment.body }
end
end
end
我想知道的是我们搜索帖子时匹配的评论(如果匹配使用评论字段),那么我可以向用户显示与搜索匹配的帖子和评论。如果有多个比赛,请根据比分获得最佳比赛。我正在考虑将id作为元数据添加到评论字段中,但我找不到这样做的方法。
有没有办法附加某种非索引元数据(在这种情况下是每条评论的id),当使用该字段匹配时可以检索到这些元数据?还有其他建议可以解决这个问题吗?
答案 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)