无法在SolrNet中正确获取TermVector结果

时间:2013-06-06 11:05:55

标签: solrnet

我无法通过SolrNet正确获得TermVector结果。我尝试使用以下代码。

QueryOptions options = new QueryOptions()
{
    OrderBy = new[] { new SortOrder("markupId", Order.ASC) },
    TermVector = new TermVectorParameters
    {
        Fields = new[] { "text" },
        Options = TermVectorParameterOptions.All
    }
};

var results = SolrMarkupCore.Query(query, options);

foreach (var docVectorResult in results.TermVectorResults)
{
    foreach (var vectorResult in docVectorResult.TermVector)
        System.Diagnostics.Debug.Print(vectorResult.ToString());
}

在上面的代码中,foreach的fore.TermVectorResults给出了正确的计数,而内部foreach中的docVectorResult.TermVector是空的。

我复制了上面代码生成的solr查询,并针对solr admin发出,我正确获取了termVectors值。我发出的实际查询在

之下
http://localhost:8983/solr/select/?sort=markupId+asc&tv.tf=true&start=0&q=markupId:%2823%29&tv.offsets=true&tv=true&tv.positions=true&tv.fl=text&version=2.2&rows=50

1 个答案:

答案 0 :(得分:0)

首先,您应检查HTTP查询以确保termvector功能已设置属性。

如果不正常,请根据以下内容更改索引:

The Term Vector Component

如果可以,可以通过将处理程序更改为termvector处理程序来使用“ ExtraParams”。试试这个:

public SolrQueryExecuter<Product> instance { get; private set; }

 public ICollection<TermVectorDocumentResult> resultDoc(string q)
            {
                string SERVER="http://localhost:7080/solr/core";//change this
                var container = ServiceLocator.Current as SolrNet.Utils.Container;
                instance = new SolrQueryExecuter<Product>(
                   container.GetInstance<ISolrAbstractResponseParser<Product>>(),
                   new SolrConnection(SERVER),
                   container.GetInstance<ISolrQuerySerializer>(),
                   container.GetInstance<ISolrFacetQuerySerializer>(),
                   container.GetInstance<ISolrMoreLikeThisHandlerQueryResultsParser<Product>>());
                instance.DefaultHandler = "/tvrh";
                SolrQueryResults<Product> results =
                    instance.Execute(new SolrQuery(q),
                new QueryOptions
                {
                    Fields = new[] { "*" },
                    Start = 0,
                    Rows = 10,
                    ExtraParams = new Dictionary<string, string> {
                        { "tv.tf", "false" },
                        { "tv.df", "false" },
                        { "tv.positions", "true" },
                        { "tv", "true" },
                        { "tv.offsets", "false" },
                        { "tv.payloads", "true" },
                        { "tv.fl", "message" },// change the field name here
                    }
                }
                );
                return results.TermVectorResults;
            }