我对Apache Solr有疑问
卷曲http://localhost:8983/solr/sampleCore/update?commitWithin=1000 -H"内容类型:text / xml" --data-binary' testdoc5'
这个新添加的文档仍未出现在solr中。
当我使用posts.jar重新索引数据时,它会显示出来。
然后提交有什么用?每次我从solr添加/删除文档时,是否需要索引数据?
答案 0 :(得分:1)
看来你是对的,默认情况下,update
并未因性能原因而提交,因此你无法看到它。
此链接描述了提交文档的方法: https://cwiki.apache.org/confluence/display/solr/Near+Real+Time+Searching
有几种方法可以实现NRT:
commit=true
,硬提交,费用昂贵optimize=true
,就像硬提交一样,但成本更高,因为它将所有细分都放在一个细分中。commitWithin=<milliseconds>
,如您的问题中使用的那样,它是一个软提交,价格较低,但在云模式下无法同步到奴隶。我通过以下方式测试了commitWithin=<milliseconds>
:
curl "http://localhost:8983/solr/dummy/update?wt=json&indent=true&commitWithin=2000" -d '[
{"id":"4", "name":"Bob Smith", "create_date":"2016-02-16T14:36:12Z"}
]'
2秒后,它可以搜索到。它应该工作。
在您的情况下,您需要等待1秒钟,并且不要查询从属复制,如果您使用的是云模式,请查询主服务器。
我对solr也不太熟悉,但希望这可能会有所帮助。
只是尝试使用xml数据,它也适用于我的solr( 5.4.1,在linux 上),它可以在2秒内搜索。
参考:https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers
e.g
curl "http://localhost:8983/solr/dummy/update?wt=json&indent=true&commitWithin=2000" -H "Content-Type: text/xml" --data-binary '
<add>
<doc>
<field name="id">5</field>
<field name="name">Jennifer Aniston</field>
<field name="create_date">2016-02-16T23:10:21Z</field>
</doc>
</add>'
我没有为xml做任何其他配置,想知道你是否更改了关于NRT的默认配置。