如何使用单个solr实例索引和搜索位于同一数据源中的两个不同的表(两个不同的搜索字段没有连接)

时间:2011-04-12 13:45:12

标签: xml indexing solr

我是solr的新手。我有几个关于solr索引和搜索的问题:

  1. 如果我想要两个搜索框,我可以配置索引两个表(没有关系1.书籍和2.计算机,两者都在同一个数据源中)。是否可以在一个data-config.xml中定义两个实体
  2. 如果是,请告诉我相关步骤。

    我想我们可以使用两个不同的data-config.xml文件。但需要知道如何在schema.xml中配置和相应的更改。

    1. 如何配置solr以在一个solr实例上索引PDF文件和Mysql。
    2. 请帮帮我,让我们知道是否有参考文件。

2 个答案:

答案 0 :(得分:5)

2个不同的表无关系

数据-config.xml中:

    <document>
        <entity name="topic" transformer="TemplateTransformer" pk="topic_id" query="select topic_id,topic_title,creation_date,updation_date,vote_count,.....">
            <field column=" doc_id " template="TOPIC_${topic.topic_id} " />
            <field column="doc_type " template="TOPIC " />

        </entity>

        <entity name="product " transformer="TemplateTransformer " pk="product_id " query="SELECT product_id,..... ">
            <field column="doc_id " template="PRODUCT_${product.product_id} " />
            <field column="doc_type " template="PRODUCT " />
            <field column="product_supplier_id " name="product_supplier_id " />
            <field column="supplier_product_code " name="supplier_product_code " />
            <field column="product_display_name " name="product_display_name " />
        </entity>
    </document>

<强> schema.xml中:

    <schema>
        . . .
        <fields>

            <field name="doc_id" type="string" />
            <field name="doc_type" type="string" />

            <field name="catchall" type="string" stored="false" omitNorms="true" multiValued="true" />


            <field name="topic_title" type="text_general" />. . . .
        </fields>

        <uniqueKey>doc_id</uniqueKey>
        <copyField source="*" dest="catchall" />

        <!-- field for the QueryParser to use when an explicit fieldname is absent -->
        <defaultSearchField>catchall</defaultSearchField>
    </schema>

更多信息 - http://www.lucidimagination.com/blog/2011/02/12/solr-powered-isfdb-part-4/

不需要上述字段,也可能在编制索引时产生问题

您可以在浏览器上查询http://localhost:8080/solr/select/?q=*:*&fq=doc_type:PRODUCT

答案 1 :(得分:0)

您可以使用Solr轻松完成此操作,只需仔细阅读DataImportHandler即可: http://wiki.apache.org/solr/DataImportHandler 这个例子: http://wiki.apache.org/solr/MultipleIndexes

然后针对实体的具体示例进行一些谷歌搜索。基本上,您的data-config.xml应该像这样(未经测试):

<entity name="books" transformer="TemplateTransformer" dataSource="myindex"
        query="SELECT * FROM t_books";>
<field column="category" template="books" name="category"/></entity>
<entity name="computers" 
            dataSource="myindex"
        query="SELECT * FROM t_computers">
  <field column="category" template="computers" name="category"/></entity>  

使用模板分隔两个实体,并将类别字段定义为schema.xml中的字符串。此外,请确保您注意如何设置唯一ID参数,此特定主题的一些信息在此处: http://lucene.472066.n3.nabble.com/Indexing-multiple-entities-td504464.html 并在这里查看: http://search.lucidimagination.com/search/document/f84c3abf7e859be1/dataimporthanlder_multiple_entities_will_step_into_each_other

使用这种方法,您可以在同一索引中拥有两组数据,如果您希望它们适用于两个单独的搜索框,您只需运行以下搜索:

myquery和类别:(书籍)&lt; ---这只能从书中获得结果,或者这个只会得到你的计算机结果---&gt; myquery和类别:(计算机)。 希望能帮助到你。 对于你的pdf问题,我相信你必须使用Apache的Tika模块,我在这里没有太多帮助,因为我自己没有使用它,但这里的链接: http://wiki.apache.org/solr/TikaEntityProcessor