在Solr中使用多值字段排序

时间:2011-10-21 05:31:48

标签: solr lucene solrnet

我有一个Solr索引,可以将Price存储在每个产品的多值字段中。

我需要按价格对结果集进行排序,其中价格从低到高,从高到低。

我尝试在价格上使用排序显示错误您无法对多值=真实字段进行排序。

下面是我的solr XML

<arr name="sellprice">
<float>195.0</float>
<float>136.5</float>
<float>10.0</float>
</arr>
schema.xml中的

 <field name="sellprice" type="float" indexed="true" stored="true" multiValued="true"/>

在C#代码中

ISolrQueryResults<ProductTest2> powerArticles = solr.Query(new
SolrQuery("WebCategory_Id:10") && new SolrQueryInList("FilterID",
    146), new QueryOptions { FilterQueries = new[] { new
SolrQueryByRange<decimal>("sellprice", 10, 40) }, OrderBy = new[] {
    new SolrNet.SortOrder(sellprice, desc) } });

有人可以用一些好的例子来解释吗?

1 个答案:

答案 0 :(得分:14)

使用Solr对多值字段进行排序不能正常工作。

文档

  

可以对文档的“得分”进行排序,也可以对任何multiValued =“false”indexed =“true”字段进行排序,前提是该字段为   非标记化(即:没有分析器)或仅使用分析器   产生一个Term(即:使用KeywordTokenizer)

当您想要将产品从低到高或从高到低排序时,Solr选择什么价格?从示例中可以看出,卖出价为0以及195?

The function queries also do not allow to use max or min on the multivalued fields.

您必须将最高和最低卖价保存为单值字段,并使用这些字段进行排序。

highest_sell_price=195
lowest_sell_price=0

并使用这些字段进行排序。