0

我将使用取自 sunspot solr 文档的实际示例。假设我们有带有评论的帖子,然后一个帖子索引它的标题和评论:

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

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

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

4

1 回答 1

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)

于 2013-07-01T00:05:26.293 回答