您可以将更新URL上的softcommit传递给SOLR吗?

时间:2013-12-18 19:56:13

标签: c# solr solr4

我想通过softcommit向solr发送更新。

这样的事情:

http://xxx:8983/solr/corename/update?softcommit=true

我在C#中工作,所以这就是代码的样子:

public void PostToSolr( string solrXML, SolrCommitType commitType )
    {
        string uri = solrConfig.UpdateURL;  //something like  "http://xxxx:8983/solr/corename/update";

        switch( commitType )
        {
            case SolrCommitType.SOFT:
                uri = uri + "?softcommit=true";
                break;

            case SolrCommitType.HARD:
                uri = uri + "?commit=true";
                break;
        }

        HttpWebResponse response = null;
        WebRequest request = WebRequest.Create( uri );

        try
        {

            request.ContentType = "application/xml";
            request.Method = "POST";
            using( var rs = request.GetRequestStream( ) )
            {
                byte[] byteArray = Encoding.UTF8.GetBytes( solrXML );
                rs.Write( byteArray, 0, byteArray.Length );
            }

            // get response
            response = request.GetResponse( ) as HttpWebResponse;

            HttpStatusCode statusCode = response.StatusCode;

            if( statusCode != HttpStatusCode.OK )
            {
                throw new Exception( String.Format( "HttpStatusCode={0}.", statusCode.ToString( ) ) );
            }
        }
        catch( Exception ex )
        {
            throw new Exception( String.Format( "Uri={0}. Post Data={1}", uri, solrXML ), ex );
        }
        finally
        {
            if( null != response )
            {
                response.Close( );
                response = null;
            }

            request = null;
        }
    }

当我使用softcommit发布到SOLR时,更新的文档不会立即显示。在solr配置中,我设置了autosoftcommit每分钟发生一次,因此最终更新的文档确实可见。

如何通过更新发送新文档并立即显示,而无需提交并重新打开搜索器?有没有办法强制软件使用?或者只根据配置文件中设置的策略发生软提交?

1 个答案:

答案 0 :(得分:1)

您需要做的就是使用参数softCommit(驼峰案例),这样可以解决问题。样本请求将是:

curl http://localhost:8983/solr/collection1/update?softCommit=true -H "Content-Type: text/xml" --data-binary '<add><doc><field name="id">testdoc2</field></doc></add>'

可以在添加文档之后使用它来提交尚未提交的内容,但尝试使用camel case softCommit boolean parameter。

来自documentation

  

softCommit = "true" | "false" - 默认为false - 执行软提交 - 这将以更高性能的方式刷新索引的“视图”,但没有“磁盘上”保证。 Solr(!)4.0