【问题标题】:How to index and search two different tables which are in same datasource using single solr instance(two different search fields no joins)如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表(两个不同的搜索字段没有连接)
【发布时间】:2011-08-03 22:04:34
【问题描述】:

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

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

如果是,请告诉我步骤。

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

  1. 如何配置 solr 以在一个 solr 实例上同时索引 PDF 文件和 Mysql。

请帮助我,如果有任何参考文件,请告诉我。

【问题讨论】:

    标签: xml indexing solr


    【解决方案1】:

    2 个不同的表没有关系

    data-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=*:*&amp;fq=doc_type:PRODUCT等浏览器上查询

    【讨论】:

      【解决方案2】:

      您可以使用 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 AND category:(books) myquery AND category:(computers)。 希望能帮助到你。 对于您的 pdf 问题,我相信您必须使用 Apache 的 Tika 模块,我在这里不会有太大帮助,因为我自己没有使用它,但这里是链接: http://wiki.apache.org/solr/TikaEntityProcessor

      【讨论】:

      猜你喜欢
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多