Apche solr与solr commit和indexing的混淆

时间:2016-02-16 05:52:06

标签: solr lucene

我对Apache Solr有疑问

  1. 我创建了一个名为" sampleCore"使用posts.jar
  2. 添加了xml数据和索引数据
  3. 使用以下网址添加了新文档: -
  4. 卷曲http://localhost:8983/solr/sampleCore/update?commitWithin=1000 -H"内容类型:text / xml" --data-binary' testdoc5'

    这个新添加的文档仍未出现在solr中。

    当我使用posts.jar重新索引数据时,它会显示出来。

    然后提交有什么用?每次我从solr添加/删除文档时,是否需要索引数据?

1 个答案:

答案 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也不太熟悉,但希望这可能会有所帮助。

@Update:

只是尝试使用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的默认配置。