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