Hi everybody,

I want to index and search over a class model (include has filter) which
could be like this.

*class ForumPost < ActiveRecord::Base
  validates_presence_of :title, :content

  belongs_to :forum_section, :foreign_key=> :section_id
  belongs_to :forum_post, :foreign_key=> :post_id
  has_many :forum_posts,:foreign_key=> :post_id, :dependent=>:destroy
  belongs_to :user

xss_terminate :html5lib_sanitize => [ :content ]

   # Definition de l index de recherche
 define_index do
   # General (Mots cles / Nom du forum / Sous-Forum Categorie / Auteur /
Nombre de reponses)
   indexes title, :as => :ts_forum_post_title
   indexes content, :as => :ts_forum_post_content

   has forum_post(:id), :as => :ts_forum_post_ids

   # Propriete sur les recherches
   set_property :enable_star => 1
   set_property :min_prefix_len => 1

 end
end*

If the ForumPost is the TOPIC, they don't have forum_post value (NULL
value), and their reply forum_post value will be the TOPIC ID.

To be more clear, an example of my database

*"id";"title";"content";"user_**id";"section_id";"post_id";"**
created_at";"updated_at"
"41";"TOPIC";"<p>cvxcvxcvcx<**br/></p>";"11";"15";NULL;"**2009-05-06
10:01:07";"2009-05-06 10:01:07"
"44";"reply_1";"<p>cxvxv<br/><**/p>";"11";"15";"41";"2009-05-**06
10:01:50";"2009-05-06 10:01:50"
"45";"reply_2";"<p>vxvcxvxc<**br/></p>";"11";"15";"41";"**2009-05-06
10:02:10";"2009-05-06 10:02:10"*



When i'm searching for "cx*" in Search client, the result is good

*search --config
/home/gamez/project/uneek/**trunk/config/development.**sphinx.conf
cx*

displaying matches:
1. document=410, weight=1, ts_forum_post_ids=41, sphinx_internal_id=41,
class_crc=3624676887, subclass_crcs=(3624676887), sphinx_deleted=0
    id=41
    title=TOPIC
    content=<p>cvxcvxcvcx<br/></p>
    user_id=11
    section_id=15
    post_id=(NULL)
    created_at=2009-05-06 10:01:07
    updated_at=2009-05-06 10:01:07
2. document=440, weight=1, ts_forum_post_ids=44, sphinx_internal_id=44,
class_crc=3624676887, subclass_crcs=(3624676887), sphinx_deleted=0
    id=44
    title=reply_1
    content=<p>cxvxv<br/></p>
    user_id=11
    section_id=15
    post_id=41
    created_at=2009-05-06 10:01:50
    updated_at=2009-05-06 10:01:50
3. document=440, weight=1, ts_forum_post_ids=45, sphinx_internal_id=45,
class_crc=3624676887, subclass_crcs=(3624676887), sphinx_deleted=0
    id=45
    title=reply_2
    content=<p>vxvcxvxc<br/></p>
    user_id=11
    section_id=15
    post_id=41
    created_at=2009-05-06 10:01:50
    updated_at=2009-05-06 10:01:50*

words:
1. 'cx*': 3 documents, 6 hits

But, With, thinkingSphinx search and has filter, the result is wrong.

*    @searches = ThinkingSphinx::Search.search(**params[:search][:query],
:per_page => self.per_page, :classes => [UserProfile, Community, Article,
Event, Forum, Blog, BlogPost, BlogComment, Forum, ForumPost, ForumSection],
:with => {
        :ts_community_ids => communities_ids_from_user(current_user.id),
        :ts_blog_comments_ids => blog_comments_ids_from_user(current_user.id
),
        :ts_blog_post_ids => blog_posts_ids_from_user(current_user.id),
        :ts_blog_ids => blog_ids_from_user(current_user.id),
        :ts_forum_ids => forum_ids_from_user(current_user.id),
        :ts_forum_post_ids => forum_post_ids_from_user(current_user.id),
        :ts_forum_section_ids => forum_section_ids_from_user(current_user.id
)
        }
    )*

The :ts_forum_post_ids value is [36, 41, 44, 45, 63, 64] but, Sphinx search,
doesn't include 41 ID Document

/* Mongrel Log */
Sphinx: cx*
Sphinx Result: [44, 45]

But, if I delete the line, and search like this

*    @searches = ThinkingSphinx::Search.search(**params[:search][:query],
:per_page => self.per_page, :classes => [UserProfile, Community, Article,
Event, Forum, Blog, BlogPost, BlogComment, Forum, ForumPost, ForumSection],
:with => {
        :ts_community_ids => communities_ids_from_user(current_user.id),
        :ts_blog_comments_ids => blog_comments_ids_from_user(current_user.id
),
        :ts_blog_post_ids => blog_posts_ids_from_user(current_user.id),
        :ts_blog_ids => blog_ids_from_user(current_user.id),
        :ts_forum_ids => forum_ids_from_user(current_user.id),
        :ts_forum_section_ids => forum_section_ids_from_user(current_user.id
)
        }
    )*

The result is good.

I think TS ignore docs when NULLABLE belongs_to is present and when we using
has keyword. Do you have some idea to fix them ? or i'm doing something
wrong ?

Thank's.

Best regards,

Mickaël ALLAIN.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Thinking Sphinx" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/thinking-sphinx?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to