【问题标题】:indexing Each documents field inside xml separately as separate document将xml中的每个文档字段分别索引为单独的文档
【发布时间】:2017-02-08 09:09:22
【问题描述】:

我正在尝试索引具有以下格式的 1400 个数据文档的 xml(每个“信息”字段开始和结束都是一个单独的文档实体。

<add>
<information>
    <id>a1a</id>
    <author>abcd</author>
    <bibliography>a. b. ,c</bibliography>
    <body>This sample one.</body>
    <title>Sample one</title>
</information>
<information>
    <id>a2a</id>
    <author>xyz</author>
    <bibliography>x. y.x</bibliography>
    <body>This is sample two</body>
    <title>Sample Two</title>
</information>
</add>

我使用命令提示符使用 post 命令提交文件,java -Durl=http://localhost:8983/solr/update/extract?literal.id=VR -Dtype=application/xml -jar post.jar VR.xml

Schema.xml(直到字段声明)

 <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

   <field name="bibliography" type="string" indexed="true" stored="true"/>
   <field name="body" type="text_en" indexed="true" stored="true"/>

   <field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/>
   <field name="name" type="text_general" indexed="true" stored="true"/>
   <field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/>
   <field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>
   <field name="features" type="text_general" indexed="true" stored="true" multiValued="true"/>
   <field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />

   <field name="weight" type="float" indexed="true" stored="true"/>
   <field name="price"  type="float" indexed="true" stored="true"/>
   <field name="popularity" type="int" indexed="true" stored="true" />
   <field name="inStock" type="boolean" indexed="true" stored="true" />

   <field name="store" type="location" indexed="true" stored="true"/>

   <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
   <field name="subject" type="text_general" indexed="true" stored="true"/>
   <field name="description" type="text_general" indexed="true" stored="true"/>
   <field name="comments" type="text_general" indexed="true" stored="true"/>
   <field name="author" type="text_general" indexed="true" stored="true"/>
   <field name="keywords" type="text_general" indexed="true" stored="true"/>
   <field name="category" type="text_general" indexed="true" stored="true"/>
   <field name="resourcename" type="text_general" indexed="true" stored="true"/>
   <field name="url" type="text_general" indexed="true" stored="true"/>
   <field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
   <field name="last_modified" type="date" indexed="true" stored="true"/>
   <field name="links" type="string" indexed="true" stored="true" multiValued="true"/>


   <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>


   <!-- catchall field, containing all other searchable text fields (implemented
        via copyField further on in this schema  -->
   <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

   <!-- catchall text field that indexes tokens both normally and in reverse for efficient
        leading wildcard queries. -->
   <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>

   <!-- non-tokenized version of manufacturer to make it easier to sort or group
        results by manufacturer.  copied from "manu" via copyField -->
   <field name="manu_exact" type="string" indexed="true" stored="false"/>

   <field name="payloads" type="payloads" indexed="true" stored="true"/>



   <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
   <dynamicField name="*_is" type="int"    indexed="true"  stored="true"  multiValued="true"/>
   <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" />
   <dynamicField name="*_ss" type="string"  indexed="true"  stored="true" multiValued="true"/>
   <dynamicField name="*_l"  type="long"   indexed="true"  stored="true"/>
   <dynamicField name="*_ls" type="long"   indexed="true"  stored="true"  multiValued="true"/>
   <dynamicField name="*_t"  type="text_general"    indexed="true"  stored="true"/>
   <dynamicField name="*_txt" type="text_general"   indexed="true"  stored="true" multiValued="true"/>
   <dynamicField name="*_en"  type="text_en"    indexed="true"  stored="true" multiValued="true"/>
   <dynamicField name="*_b"  type="boolean" indexed="true" stored="true"/>
   <dynamicField name="*_bs" type="boolean" indexed="true" stored="true"  multiValued="true"/>
   <dynamicField name="*_f"  type="float"  indexed="true"  stored="true"/>
   <dynamicField name="*_fs" type="float"  indexed="true"  stored="true"  multiValued="true"/>
   <dynamicField name="*_d"  type="double" indexed="true"  stored="true"/>
   <dynamicField name="*_ds" type="double" indexed="true"  stored="true"  multiValued="true"/>

   <!-- Type used to index the lat and lon components for the "location" FieldType -->
   <dynamicField name="*_coordinate"  type="tdouble" indexed="true"  stored="false" />

   <dynamicField name="*_dt"  type="date"    indexed="true"  stored="true"/>
   <dynamicField name="*_dts" type="date"    indexed="true"  stored="true" multiValued="true"/>
   <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>

   <!-- some trie-coded dynamic fields for faster range queries -->
   <dynamicField name="*_ti" type="tint"    indexed="true"  stored="true"/>
   <dynamicField name="*_tl" type="tlong"   indexed="true"  stored="true"/>
   <dynamicField name="*_tf" type="tfloat"  indexed="true"  stored="true"/>
   <dynamicField name="*_td" type="tdouble" indexed="true"  stored="true"/>
   <dynamicField name="*_tdt" type="tdate"  indexed="true"  stored="true"/>

   <dynamicField name="*_c"   type="currency" indexed="true"  stored="true"/>

   <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
   <dynamicField name="attr_*" type="text_general" indexed="true" stored="true" multiValued="true"/>

   <dynamicField name="random_*" type="random" />

 <uniqueKey>id</uniqueKey>

所以,这里我已经使用默认配置添加了 xml 中提到的所有额外字段。

索引完成后,如果我把查询放在这里,给出的响应是

{ “id”:“VR”, “内容类型”: [ “应用程序/xml” ], “内容”: [ " \n \n \n \n \n \n \n \n \n a1a\n abcd\n a. b. ,c\n 这个示例一。\n 示例一\n \n \n a2a\n xyz\n x. y.x\n 这是样本二\n 样本二\n \n \n " ], “版本”:1558754454898999300

预期的响应是:

{ “id”:“abcd”, “内容类型”: [ “应用程序/xml” ], “内容”: [ " \n \n \n \n \n \n \n \n \n a1a\n abcd\n a. b. ,c\n 这个样本一。\n 样本一\n \n \n a2a\n " ],

    "_version_": 1558754454898999300

{ “id”:“xyz”, “内容类型”: [ “应用程序/xml” ], “内容”: [ " xyz\n x.y.x\n 这是样本二\n 样本二\n \n \n " ], “版本”:1558754454898999301

让我知道,我在哪里失踪,请提出所需的配置,如果需要任何额外信息,请随时询问。

【问题讨论】:

标签: xml apache indexing solr


【解决方案1】:

我认为,所有内容都被索引为一个文档。

&lt;information&gt;&lt;/information&gt; 标签更改为&lt;doc&gt;&lt;/doc&gt;

<add>
<doc>
    <id>a1a</id>
    <author>abcd</author>
    <bibliography>a. b. ,c</bibliography>
    <body>This sample one.</body>
    <title>Sample one</title>
</doc>
<doc>
    <id>a2a</id>
    <author>xyz</author>
    <bibliography>x. y.x</bibliography>
    <body>This is sample two</body>
    <title>Sample Two</title>
</doc>
</add>

【讨论】:

  • 抱歉,查询的响应仍然相同。如果您有任何其他解决方案?
【解决方案2】:

将您的 xml 转换为以下格式:

<add>
  <doc>
    <field name="id">a1a</field>
    <field name="author">abcd</field>
    <field name="bibliography">a. b. ,c</field>
    <field name="body">This sample one.</field>
  </doc>

  <doc>
    <field name="id">a2a</field>
    <field name="author">xyz</field>
    <field name="bibliography">x. y. ,z</field>
    <field name="body">Sample Two.</field>
  </doc>
</add>

现在您可以使用以下命令发布数据:

/opt/solr/bin/post -c collection_name VR.xml

【讨论】:

  • 抱歉,查询的响应仍然相同。如果你有任何其他解决方案?
【解决方案3】:

Ashraful 的回答中的 XML 文档是正确的:

<add>
  <doc>
    <field name="id">a1a</field>
    <field name="author">abcd</field>
    <field name="bibliography">a. b. ,c</field>
    <field name="body">This sample one.</field>
  </doc>

  <doc>
    <field name="id">a2a</field>
    <field name="author">xyz</field>
    <field name="bibliography">x. y. ,z</field>
    <field name="body">Sample Two.</field>
  </doc>
</add>

您在ExtractingRequestHandlerliteral.id=VR 上的帖子创建/更新一个带有id VR 的文档。

java -jar post.jar VR.xml 发帖会得到以下结果:

 "docs": [
  {
    "id": "a1a",
    "author": "abcd",
    "author_s": "abcd",
    "bibliography": "a. b. ,c",
    "body": "This sample one.",
    "_version_": 1558910648654495700
  },
  {
    "id": "a2a",
    "author": "xyz",
    "author_s": "xyz",
    "bibliography": "x. y. ,z",
    "body": "Sample Two.",
    "_version_": 1558910648656593000
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-14
    • 2021-01-08
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多