我使用 版本 6.6.0
的 Solr。我有一个标题(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);
但所有这些都会返回相同的错误
我引用这个answer找到了解决方案
它说使用最小/最大函数。 query.setSort(field("pageTitle",min), ORDER.asc); 这是我试图设置为查询的内容,我不明白这里使用的参数是什么。
这是我正在使用的 Maven 依赖项
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>6.5.1</version>
</dependency>
最佳答案
除非 title
实际上是多值的 - 您的帖子可以有多个标题吗 - 您应该 define it as multiValued="false"
in your schema 。但是,还有第二个问题 - 默认类型 text_general
的字段不适合排序,因为它将生成多个标记,每个标记对应标题中的每个单词。这对于搜索很有用,但在排序时会给出奇怪且不直观的结果。
因此,定义一个 title_sort
字段和 use a field type with a KeywordTokenizer
和 LowerCaseFilter
attached (如果您想要不区分大小写排序),或者如果您想要区分大小写排序,请为 title_sort
字段使用已定义的 string
字段类型。
关于java - Solr中多值字段的搜索结果按升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145038/