java - Solr中多值字段的搜索结果按升序排序

标签 java maven spring-mvc solr

我使用 版本 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 KeywordTokenizerLowerCaseFilter attached (如果您想要不区分大小写排序),或者如果您想要区分大小写排序,请为 title_sort 字段使用已定义的 string 字段类型。

关于java - Solr中多值字段的搜索结果按升序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145038/

相关文章:

Java 等同于 C++ 中动态分配的数组

java - 如何删除白色背景以及如何添加棍子?

java - 在 Maven 和 Java 9 中使用带有拆分包的第三方 Artifact

java - Spring框架: Register conversion-service with java config

java - 不理解包含自身可迭代的 Java 类定义。

java - 使用 wiremock 时连接被拒绝

java - spring-data-jpa 1.6 需要 spring 框架 3 库,是真的吗,还是我错过了什么?

eclipse - "Unable to find main class"在 Eclipse 中的 spring-boot 项目中使用 Maven

java - 使用ajax向服务器发送数据

java - Spring Security hasRole() 不起作用