Solrnet Payloads - 添加文档时的异常

时间:2016-05-15 19:16:45

标签: solr solrnet

我正在尝试从具有相关权重的用户输入的标签中索引一组图像。我试图使用作为有效载荷输入的权重。我按照这个post创建了字典对象。

我不确定在哪里添加分隔字段colors.Add(tag_name, (float)score);或者应该是colors.Add("color_p", "tag_name |score");

如何使用帖子中提到的字典对象?

Dictionary<string, float> colors = new Dictionary<string, float>();
                            tags = TagUtils.GetTags(image, models["colors"]);
                            N = tags.TagNames.Count;
                            for (int n = 0; n < N; n++)
                            {
                                string tag_name = tags.TagNames[n];
                                int score = tags.Scores[n];
                                colors.Add(tag_name, (float)score);
                            }

                            docs_list.Add(new SolrDocument
                            {
                                _product_id = product_id,
                                _product_type = product_type,
                                _url = url,
                                _sku = sku,
                                _images = images.ToList<string>(),
                                _price = (float)price,
                                _name = name,
                                _color_p = colors,<--my payloads type field
                            });

我的schema.xml看起来像这样:

<field name="color_p" type="payloads" indexed="true" stored="true"  multiValued="true"/>

,定义如下:

  <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" >
         <analyzer>
            <tokenizer class="solr.WhitespaceTokenizerFactory"/>
             <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float" delimiter="|" />
        </analyzer>
    </fieldtype>

1 个答案:

答案 0 :(得分:0)

发布一个答案,希望它可以像其他人一样帮助其他人:

*Dictionary<string, float> colors = new Dictionary<string, float>();*

实际应该是

Dictionary<string> colors = new Dictionary<string>();

并添加如下:

                                tags = colorTags.Result;
                                N = tags.TagNames.Count;
                                for (int n = 0; n < N; n++)
                                {
                                    string tag_name = tags.TagNames[n];
                                    int score = tags.Scores[n];
                                    if (score > 0)
                                        colors.Add(tag_name + "|" + score);
                                }