2014-04-01 53 views
0

我一直在努力为现有的solr集合添加一个新的字段并向其中添加数据。总之,当我更新文档时,我试图改变的记录从搜索结果中消失。尝试向solr集合添加新字段会删除记录?

我会给一点背景,然后再解释一下。首先,我使用solr版本3.4.0,并且我通过php脚本更新了集合。

我将我的新字段添加到schema.xml;我应该注意到,还有许多其他的领域已经存在。我的新领域是这样的:

<field name="vocabularies" type="integer" indexed="true" stored="true" multiValued="true"/> 

后我加入了场schema.xml,我重新启动Solr的服务器,然后开始看到在Solr管理架构浏览器我的新领域。到现在为止还挺好。

转到我的PHP脚本,我的卷曲选项如下。

$options = array(
    CURLOPT_URL => 'http://10.156.10.21:8983/solr/mycollection/update', 
    CURLOPT_HEADER => 0, 
    CURLOPT_HTTPHEADER, array(
    'Content-Type: text/xml', 
), 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_POST => 1, 
    CURLOPT_BINARYTRANSFER => 1, 
    CURLOPT_POSTFIELDS => $update_query, 
); 
$ch = curl_init(); 
curl_setopt_array($ch, $options); 
$contents = curl_exec($ch); 
curl_close($ch); 

$update_query变量填充了这样的事情:

 <add> 
     <doc> 
      <field name="id">id55328</field> 
      <field name="title">MyRecord</field> 
      <field name="description">My description.</field> 
      <field name="author">Winston</field> 
      <field name="image_link">http://mydomain.com/my/image/path/image.jpg</field> 
      <field name="link">http://www.mydomain.com/my-url</field> 
      <field update="add" name="vocabularies">12</field> 
      <field update="add" name="vocabularies">24</field> 
     </doc> 
     </add> 

id字段是uniqueKey场。在发送此POST之后,我发送另一个POST具有与上面相同的卷曲配置,但将$update_query变量替换为'<commit/>'

现在,当我运行我的PHP脚本时,没有任何变化。要看看它是否可能是我的PHP卷曲设置的问题,我试着从Dev HTTP Client运行POST

我将请求类型设置为POST,添加了Content-Type: text/xml标头,并发送了与上面包含的$update_query变量相同的xml

我回来了如下回应:

<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">2996</int> 
    </lst> 
</response> 

我打发<commit/>POST,然后检查了我的搜索结果,而我期待改变记录已经从搜索结果中消失了。我检查了数据库中solr记录的总数,该数字没有改变。然后我在solr管理模式浏览器中检查了我的新字段,并且termfrequency计数已更新,反映了我的更改。

我使用的搜索查询的结构是这样的:

http://10.156.10.21:8983/solr/mycollection/select?q=*&start=50&rows=25&fq=sID:1&fl=nid+author+description+id+image_link+link+title+vocabularies&qt=&wt=&explainOther=&hl.fl= 

所以我的问题是,什么是错我的PHP卷曲的实现,为什么是我Dev HTTP Client(有效卷曲GUI)的请求,虽然看似在某些方面取得成功似乎隐藏了搜索引起的影响记录?

任何有识之士将不胜感激。

在此先感谢!

更新: 如果我查询我更新了记录的id,我得到正确的一回,完成了新的领域,我输入了正确的数据。这样的工作!但它仍未出现在搜索结果中。我的搜索查询有问题吗?如果是这样,如果我只是添加一个字段,为什么还要更改呢?

回答

0

它看起来像你没有提交你的更新记录。

请务必添加

commit=true 

所以,也许尝试改变网址是这样的

http://10.156.10.21:8983/solr/mycollection/update?commit=true 
+0

我不是在为我的数据请求相同的请求提交,但我如上所述,之后再提交第二个请求。在功能上,如果我在一个或两个请求中提交,它会有所作为吗? – bronzehedwick

相关问题