【问题标题】:Getting started with SolrSolr 入门
【发布时间】:2012-02-06 08:58:19
【问题描述】:

我正在尝试开始使用 Apache Solr,但有些事情我并不清楚。通过阅读tutorial,我设置了一个正在运行的 Solr 实例。我感到困惑的是 Solr 的所有配置(模式等)都是 XML 格式的。当他们添加示例数据时,它显示了如何添加 xml 文档 (java -jar post.jar solr.xml monitor.xml)。这只是样本格式的错误选择吗?我的意思是,他们是在上传描述文档的数据,还是他们正在添加的实际文档是 .xml 文件?

我正在尝试添加一些 .txt 格式的书籍,所以如果我使用 java -jar post.jar mydoc.txt,我会添加吗?我怎样才能添加这个文档关于它的元数据(作者、标题)?

也就是说,我尝试设置一个简单的 Html 页面来将文档发布到 Solr:

<html>
  <head></head>
<body>
  <form action="http://localhost:8983/solr/update?commit=true" enctype="multipart/form-data" method="post">
    <input type="file">
    <input type="submit" value="Send">
  </form>
</body>
</html>

当我尝试发布文件时,我收到以下回复:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">26</int>
  </lst>
</response>

这是正确的吗?这是否意味着我已经成功添加了我的文件?如果是这样,文件中的一个单词,例如是“montagna”(这是一本意大利书籍,montagna 的意思是山......)。如果我访问网址

http://localhost:8983/solr/select/?q=montagna&start=0&rows=10&indent=on

我希望返回某些内容(可能是整个文本,或者有关文件的一些信息),但这是我得到的:

<response>
  <lst name="responseHeader">
    <int name="status">0</int>
      <int name="QTime">1</int>
      <lst name="params">
        <str name="indent">on</str>
        <str name="start">0</str>
        <str name="q">montagna</str>
        <str name="rows">10</str>
    </lst>
  </lst>
  <result name="response" numFound="0" start="0"/>
</response>

对我来说似乎不适合。另外,根据to this answer,我应该能够取回与hl.fragsize 匹配的文本。如何将其集成到搜索字符串中?谢谢你

【问题讨论】:

    标签: solr lucene full-text-search


    【解决方案1】:

    solr 示例通过 xml 消息将文档添加到索引中。看看here。您提到的*.xml 是因为文件系统上存储了一些xml 消息。那些xml消息是这样的:

    <add>
      <doc>
        <field name="id">UTF8TEST</field>
        <field name="name">Test with some UTF-8 encoded characters</field>
        <field name="manu">Apache Software Foundation</field>
        <field name="cat">software</field>
        <field name="cat">search</field>
        <field name="features">No accents here</field>
        <field name="price">0</field>
        <!-- no popularity, get the default from schema.xml -->
        <field name="inStock">true</field>
      </doc>
    </add>
    

    这只是一种表示要索引的任何类型文档的方法。每个文档都包含一个或多个字段,依此类推。向 Solr 添加文档有多种方式,例如它也接受 CSV format,但现在最常见的是 xml 格式。

    我认为您实际上并没有索引任何内容。您可以检查此查询的输出:http://localhost:8983/solr/select/?q=*:*,它将检索您在索引中拥有的所有文档。一个常见的错误也是忘记提交,但我看到你在你的 url 中添加了 commit=true 参数,所以这不是你的情况。

    如果您只想索引文本文件的内容,例如,您可以使用两个字段定义架构:

    • 文件名
    • 内容

    并使用此消息为您的文档编制索引:

    <add>
      <doc>
        <field name="filename">test.txt</field>
        <field name="content">Test with some UTF-8 encoded characters</field>
      </doc>
    </add>
    

    【讨论】:

      【解决方案2】:

      理解术语:

      Document in solr -> Row in RDBMS
      Field of document -> Column of a cell
      

      当然,Solr 核心是数据库和巨大的表,以(可能)稀疏的方式占用。

      为了您的(特定)用途,您将为每个文件创建一个文档;由ID、文件内容等组成。


      XML 是组合 solr 操作的一种方式。 http://wiki.apache.org/solr/UpdateXmlMessages

      它具有添加、删除、提交和优化操作。添加操作包括一个或多个文档。

      <add>
        <doc>
          <field name="employeeId">05991</field>
          <field name="office">Bridgewater</field>
          <field name="skills">Perl</field>
          <field name="skills">Java</field>
        </doc>
        [<doc> ... </doc>[<doc> ... </doc>]]
      </add>
      

      还有 CSV(仅添加功能)、JSON(完整功能)、DIH(计划的数据库导入)。

      还有extracting request handler,可以从各种丰富的文档(DOC、DOCX、PDF)中提取内容(和元数据)。补充:有literal可以设置自己的字段。


      提取请求处理程序将其输出存储到字段text。查询解析器q= 和荧光笔假设默认字段(是的,这与您所做的有关)text。您可以为它们指定字段; solr 字段也会在结果中返回给您。

      【讨论】:

        猜你喜欢
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 2012-11-15
        • 2010-09-21
        相关资源
        最近更新 更多