Solr入门

时间:2012-02-06 08:58:20

标签: solr lucene full-text-search

我正在尝试使用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取回匹配项周围的文字。如何将其集成到搜索字符串中?谢谢

2 个答案:

答案 0 :(得分:5)

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=*:*,它会检索索引中的所有文档。一个常见的错误也是忘记提交,但我看到您在网址中添加了commit=true参数,因此不是您的情况。

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

  • 文件名
  • 含量

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

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

答案 1 :(得分:1)

理解术语:

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也会在结果中返回给你。