【问题标题】:solr indexing for more than one entity为多个实体建立 solr 索引
【发布时间】:2013-06-12 05:38:09
【问题描述】:

我在我的 Java Web 项目中使用 Solr 进行索引。我已经阅读了 Solr 的教程并获得了一些基本知识。有一个 XML 文件 schema.xml,其中要索引的字段在字段标记中给出。我的问题是:

  1. 我在 DB 中存在 XML 文件中的字段,schema.xml 文件是否可以引用 DB 中存在的 XML 数据。
  2. 如果不是,那么我将不得不将所有字段都放在 schema.xml 中,所以如果是这种情况,那么如果需要索引多个实体,是否应该将它们都放在同一个模式中。 xml 或者我们可以为每个实体创建不同的 XML 文件吗?

【问题讨论】:

  • 您是否有一个将数据库中的数据作为 blob 的 xml 文件,并且您想要索引该数据?
  • @Jayendra 是的,数据库中的数据是一个 blob,我想对其进行索引。

标签: solr solrj


【解决方案1】:

检查以下方法:-

您可以使用DIH 来索引实体

使用XPathEntityProcessor的组合读取blob文件,并在xml文件上应用xpath生成字段。

类似这样的东西,你可以进一步搜索和扩展......

<entity name='test' query='select blob from table' dataSource='db'>
    <field column='blob' />
    <entity name='parse_xpath' dataSource='<FieldReaderDataSource>' processor='XPathEntityProcessor' forEach='/root' dataField='test.blob'>
        <field column='some_element' xpath='/some_element' />
    </entity>
</entity>

您必须在 schema.xml 中为您在 DIH 配置和 xml 文件中指定的每个映射定义字段。
除非您使用dynamic fields,否则它不会自动创建它们。

<dynamicField indexed="true" multiValued="true" name="*" stored="true" type="text_en"/>

【讨论】:

  • 是否需要在schema.xml中定义字段?
  • 如果要搜索和显示字段,则需要定义字段。您还可以定义一个 catch all 字段,然后您不需要定义这些字段。
  • 你有任何链接,以便我可以参考如何定义它。并且定义了catch all字段后,可以搜索和显示字段吗?感谢您的帮助,这对我真的很有帮助。
  • 我添加了一个带有答案的字段定义示例。如果您将其标记为已存储并已编入索引,则它们将可供搜索和显示。
  • 如果我像这样向 solr 添加数据会怎样:- SolrServer server = new HttpSolrServer("http://HOST:8983/solr/"); SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( "id",1.0f ); doc1.addField( "name", "abc" ); doc1.addField( "price", 10 ); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField( "id", 1 ); doc2.addField( "rollno", 10 ); doc2.addField( "address", "xyz" ); Collection&lt;SolrInputDocument&gt; docs = new ArrayList&lt;SolrInputDocument&gt;(); docs.add( doc1 ); docs.add( doc2 ); server.add( docs );
猜你喜欢
  • 2015-10-06
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
相关资源
最近更新 更多