我一直在努力为现有的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管理模式浏览器中检查了我的新字段,并且term
和frequency
计数已更新,反映了我的更改。
我使用的搜索查询的结构是这样的:
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
,我得到正确的一回,完成了新的领域,我输入了正确的数据。这样的工作!但它仍未出现在搜索结果中。我的搜索查询有问题吗?如果是这样,如果我只是添加一个字段,为什么还要更改呢?
我不是在为我的数据请求相同的请求提交,但我如上所述,之后再提交第二个请求。在功能上,如果我在一个或两个请求中提交,它会有所作为吗? – bronzehedwick