子数据不会显示在查询结果中 - 将Apache Solr 4.8.1与mySql一起使用

时间:2014-06-03 10:32:38

标签: php mysql apache solr

我正在尝试使用Apache SOLR索引我的Mysql数据库。目的是让solr处理所有与用户相关的搜索。

我正在将数据索引为父子关系,如教程中所示(http://wiki.apache.org/solr/DataImportHandler#Using_delta-import_command

基本上我正在尝试搜索论坛讨论。所有帖子标题都存储在名为" adda_topic"的表中。所有回复都存储在" adda_discussion" (第一个消息是第一个帖子的消息/内容)

这是我的data-config.xml文件

   

 <document name="forum_posts">  

        <entity name="forum_topics" pk="topic_id"

            query="SELECT *, 'forum' AS type FROM adda_topic"
            deltaImportQuery="SELECT *, 'forum' AS type FROM adda_topic WHERE topic_id = '${dataimporter.delta.topic_id}'"
            deltaQuery="SELECT topic_id FROM adda_topic WHERE topic_start_date > '${dataimporter.last_index_time}' ">   

           <field column="topic_id" name="id"/>
           <field column="topic_apt_id" name="apt_id"/>
           <field column="topic_owner_id" name="owner_id"/>
           <field column="type" name="type"/>          
           <field column="topic_name" name="title"/>
           <field column="topic_start_date" name="created_date"/>
           <field column="topic_filter_level" name="filter_level"/>

                <entity name="discussion" pk="discussion_topic_id" transformer="HTMLStripTransformer"

                    query="SELECT * FROM adda_discussion WHERE discussion_topic_id = '${forum_topics.topic_id}'"                        
                    deltaQuery="SELECT discussion_topic_id FROM adda_discussion WHERE discussion_date > '${dataimporter.last_index_time}'"                      
                    parentDeltaQuery="SELECT topic_id FROM adda_topic WHERE topic_id = '${discussion.discussion_topic_id}'">

                    <field column="discussion_id" name="child_ids"/>
                    <field column="discussion_text" name="content" stripHTML="true"/>

                </entity>

        </entity>

 </document>

你可以看到

我正在对每个标题/主题下的讨论进行分组。 Ann所有回复都与其外键具有相同的topic_id。

我面临的问题是当我导入数据时。只有第一次讨论是可搜索的。如果我在任何回复中搜索文本,我都不会得到任何结果。

我这样做对吗?一些主题可以有数百个回复。目前没有任何回复被索引或存储。

我如何才能获得可以搜索的回复?

e.g。如果这是样本数据。 。

  • 此处测试主题名称
    • 原帖回复/讨论
    • 额外回复一
    • 另一个回复二。

在上述情况中。我可以在这里搜索&#34;测试主题名称&#34;和#34;原始回复/讨论发布在这里&#34;

但是当我搜索&#34;额外回复1&#34;或&#34;另一个答复二&#34;

1 个答案:

答案 0 :(得分:0)

我设法自己解决了这个问题。 (在这个上几乎失去了理智)

尝试了各种组合。最后,将讨论实体与主题实体互换。 (基本上互换父母和孩子)

所以我现在为每个讨论实体索引主题实体。

一种奇怪的方法,但它有效。

这是工作的配置代码段。以防它在将来帮助任何人。

    <entity name="discussion" pk="discussion_id" transformer="HTMLStripTransformer"
        query="SELECT * FROM adda_discussion"
        deltaImportQuery="SELECT * FROM adda_discussion WHERE discussion_id = '${dataimporter.delta.discussion_id}'"
        deltaQuery="SELECT discussion_id FROM adda_discussion WHERE discussion_date > '${dataimporter.last_index_time}' ">

        <field column="discussion_id" name="id" />
        <field column="discussion_text" name="content" stripHTML="true"/>
        <field column="discussion_date" name="created_date"/>

              <entity name="topic" pk="topic_id"
                    query="SELECT 
                        *, 'forum' AS type, CONCAT('forum-', topic_id) AS global_id
                        FROM adda_topic WHERE topic_id='${discussion.discussion_topic_id}'"
                    deltaQuery="SELECT topic_id FROM adda_topic WHERE topic_start_date > '${dataimporter.last_index_time}'"                     
                    parentDeltaQuery="SELECT discussion_topic_id FROM adda_discussion WHERE discussion_topic_id = '${topic.topic_id}'"> 

                      <field column="global_id" name="global_id" />
                       <field column="topic_id" name="parent_id"/>
                       <field column="topic_apt_id" name="apt_id"/>
                       <field column="topic_owner_id" name="owner_id"/>
                       <field column="type" name="type"/>          
                       <field column="topic_name" name="title"/>                       
                       <field column="topic_filter_level" name="filter_level"/>
              </entity>
    </entity>

需要注意的另一点是,我必须使用solr分组将具有相同topic_id的所有消息组合在一起,这样每个主题只能获得一个结果。

文档确实需要改进,它没有多大提及。

希望这有助于未来的游荡灵魂。 :)