首页 > 解决方案 > 在 Solr 中按多值字段的升序对搜索结果进行排序

问题描述

我正在使用 Solr 的version 6.6.0. 我有一个标题(text_general)、描述(text_general)、id(整数)的模式。当我搜索关键字以按标题的升序列出结果时,我的代码返回错误无法对多值字段进行排序:标题。

我尝试使用以下 3 种方法设置排序

SolrQuery query = new SolrQuery();
1. query.setSort("title", SolrQuery.ORDER order);
2. query.addSort("title", SolrQuery.ORDER order);
3. SortClause ab = new SolrQuery.SortClause("title", SolrQuery.ORDER.asc);
   query.addSort(ab);

但所有这些都返回相同的错误

我通过参考这个答案找到了解决方案

它说使用最小/最大功能。query.setSort(field("pageTitle",min), ORDER.asc); 这是我试图设置为查询的内容,我不明白这里使用的参数是什么。

这是我正在使用的 Maven 依赖项

<dependency>
    <groupId>org.apache.solr</groupId>
    <artifactId>solr-solrj</artifactId>
    <version>6.5.1</version>
</dependency>

标签: javamavenspring-mvcsolr

解决方案


除非title实际上是 multiValued - 你的帖子可以有多个标题 - 你应该在你的架构中定义它multiValued="false"。但是,还有第二个问题 - 默认类型的字段text_general不适合排序,因为它会生成多个标记,标题中的每个单词都有一个标记。这对于搜索很有用,但在排序时会给出奇怪且不直观的结果。

因此,请改为定义一个title_sort字段并使用带有 aKeywordTokenizerLowerCaseFilter附加的字段类型(如果您想要不区分大小写的排序),或者如果您想要区分大小写的排序,请使用该字段的已定义string字段类型title_sort


推荐阅读