如何为solr模式定义文档级别和数据级别字段

时间:2013-05-10 22:07:31

标签: solr

我有一个名为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(只是需要的字段)解释你的答案吗?

1 个答案:

答案 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。所以我希望我已经回答了我自己的问题!