java - 在 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>
解决方案
除非title
实际上是 multiValued - 你的帖子可以有多个标题 - 你应该在你的架构中定义它multiValued="false"
。但是,还有第二个问题 - 默认类型的字段text_general
不适合排序,因为它会生成多个标记,标题中的每个单词都有一个标记。这对于搜索很有用,但在排序时会给出奇怪且不直观的结果。
因此,请改为定义一个title_sort
字段并使用带有 aKeywordTokenizer
和LowerCaseFilter
附加的字段类型(如果您想要不区分大小写的排序),或者如果您想要区分大小写的排序,请使用该字段的已定义string
字段类型title_sort
。
推荐阅读
- c - 运行 c 程序时,Visual Studio 代码显示错误
- tensorflow - 检查目标时出错:预期dense_Dense2 的形状为x,但得到的数组的形状为y
- python-3.x - 在 python3 scapy 模块中出现错误 .... 数据包嗅探器
- r - R - 带有未关闭的 xml 节点的 rvest (webscraping),这里:html_nodes("br") 的问题
- sql - T-SQL:将列转换为行
- python - 如何使用在另一个函数中定义但想在下一个函数中使用的变量?
- mongodb - 如果您打算在“数据库”对象上调用“findOne”方法,它会失败,因为不存在这样的方法
- linux - android终端rm只读文件系统
- reactjs - 如何在 Azure 上设置从中获取 manifest.json 的地址
- java - 关于如何修复和获取 WeightPlot 和 WeightEditor 选项卡的任何建议?