我有一个名为test.csv的简单文件,它有以下数据
id,author,title
1,sanjay,ABC
2,vijay,XYZ
我希望在solr中索引此文件,并将一个唯一的id传递给它,名为id = 1,以后能够查询此文档(意味着所有值,即等同于select * from table-name),同样希望索引许多这样的文件,文件ID如id = 2,id = 3等。
在我的schema.xml中,id是一个字段
<field name="id" type="string" indexed="true" stored="true" />
和
<!-- Field to use to determine and enforce document uniqueness.
Unless this field is marked with required="false", it will be a required field
-->
<uniqueKey>id</uniqueKey>
如果文件中不存在id但我想将id作为文档级别唯一性的参数传递的实例,则会尖叫出以下错误
[root@****ltest1 garyTestDocs]# curl http://localhost:8983/solr/update/csv?id='SL1' --data-binary @sample.csv -H 'Content-type:text/plain; charset=utf-8'
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 [doc=null] missing required field: ref</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /solr/update/csv. Reason:
<pre> [doc=null] missing required field: id</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
<br/>
<br/>
<br/>
<br/>
<br/>
<br/>
</body>
</html>
所以本质上有两种情况,在文件中用id列索引上面的示例文件,另一种情况是id列。但在这两种情况下,我都需要传递一个文档级别的唯一ID,即id ='1'或id ='2'。
你能用这两个场景以及curl语法和schema.xml(只是需要的字段)解释你的答案吗?
答案 0 :(得分:0)
在Solr中,将schema.xml想象为数据库表。为了保持行的唯一性,我们在其中有一个主键列。通常喜欢id列,其中包含唯一值。当您在solr中索引文档时,例如我的情况下的csv文件,其中包含列。 id列必须是唯一的,不能有空行。有很多方法可以创建独特的字符串,但仅仅是为了例如我使用格式file_name_1 ...(有一个填充系列,如1,2,3 ...)。这是在solr中指定记录唯一性的唯一方法。你不能拥有文档级别的唯一性意味着在索引时无法提供唯一的密钥。因此,在schema.xml中,您有一个唯一的密钥标记,它只是文档中唯一的列。
用于索引csv文件的qry如下: -
curl http://:8983 / solr / update / csv --data-binary @ Sample.csv -H'Content-type:text / plain;字符集= UTF-8'
schema.xml将具有id col
<field name="id" type="string" indexed="true" stored="true" />
我的文档中的一些列
<field name="author" type="text" indexed="true" stored="true" />
<field name="title" type="text" indexed="true" stored="true" />
<uniqueKey>id</uniqueKey>
我没有在索引编制时使用doc level unique id。所以我希望我已经回答了我自己的问题!