0

Я воспользуюсь практическим примером, взятым из солнечных документов solr. Скажем, у нас есть сообщения с комментариями, а затем разместить индексы его название и комментарии:Добавить извлекаемые метаданные в несколько полей в sunspot solr

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

То, что я хочу знать, является комментарием, что соответствует, когда мы ищем сообщение (если оно соответствует в поле для комментариев), поэтому я могу показать пользователю сообщения и комментарий, который соответствует поиску. Если есть более одного матча, получите лучший результат, основанный на счете. Я думал о добавлении id в метаданные в поле комментариев, но я не мог найти способ сделать это.

Есть ли способ связать какие-то неиндексированные метаданные (в этом случае идентификатор каждого комментария), которые можно получить, когда есть совпадение с использованием этого поля? Любое другое предложение решить это?

+0

Вы задаетесь вопросом не о своем солнечном пятне, а о вашей схемы. Plz, отредактируйте его соответствующим образом. –

ответ

0

IMHO вы должны хранить сообщения и комментарии по различным документам. Вы можете поместить идентификатор сообщения в документ комментария, чтобы вы могли знать, какая публикация принадлежит каждому комментарию.

Мои поля предложения является:

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> 

Вы можете запросить ваши сообщения или комментарии просто делать д = текст: «Foo», и вы будете получать все документы, которые соответствуют Foo. Затем вы можете запросить возвращаемое сообщение post_id или, возможно, попробовать какое-то соединение. Взгляните на http://wiki.apache.org/solr/Join. Вы бы сделали что-то вроде ? Q = ({join from = post_id to = id} text: "foo") (+ текст: foo + _type: post)