0

我无法通过 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 中的 results.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
4

1 回答 1

0

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

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

词向量分量

如果没问题,您可以通过将处理程序更改为 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;
            }

于 2018-07-03T05:13:14.583 回答