gpt4 book ai didi

java - 如何对indexedEmbedded中的字段进行排序

转载 作者:行者123 更新时间:2023-12-02 01:05:00 25 4
gpt4 key购买 nike

我在类内有一个具有 @OneToMany 关系的 indexedEmbedded 对象,并且希望使用该对象中包含的字段进行排序。

当我调用搜索方法时,我得到了这个异常:

“字段“employees.id_forSort”的意外文档值类型为 NONE(预期=NUMERIC)。使用 UninvertingReader 或带有文档值的索引”

提前致谢!

这是我的代码:

public Company {
....

@IndexedEmbedded(prefix = "students.", includeEmbeddedObjectId = true)
@OneToMany(mappedBy = "company")
private Set<Employee> employees= new HashSet<>();
}
public Employee{
....

@SortableField(forField = "id_forSort")
@Field(name = "id_forSort", analyze = Analyze.NO)
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}
public class CompanySearchRepository{
....

public List<Company> searchCompany(
DataTablePagination pagination, Long id, SearchCriteria searchCriteria) {
FilterField[] filterFields = validateFilterFields(searchCriteria.getFilterFields());

// Sorting
String sortField = "employees.id";

Sort sort = getSort(sortField, pagination.getSortDirection());

Query query;

if (filterFields.length > 0) {
query = getFilterableColumnsQuery(filterFields);
} else {
// global search
query = getGlobalSearchQuery(searchableFields, searchCriteria.getSearchTerm());
}

FullTextQuery fullTextQuery = getFullTextQuery(query);

initPagination(
fullTextQuery,
sort,
pagination.getPage(),
pagination.getPageSize());

List<Company> data = fullTextQuery.getResultList();
}

Sort getSort(String sortField, SortDirection sortDirection) {
SortFieldContext sortFieldContext =
getQueryBuilder().sort().byField(sortField.concat("_forSort"));

return sortDirection.equals(SortDirection.ASC)
? sortFieldContext.asc().createSort()
: sortFieldContext.desc().createSort();
}
}

最佳答案

  1. 您将可排序字段命名为 employees.id_forSort,但在搜索时,您使用另一个字段进行排序: employees.id。使用用于排序的字段。将 String sortField = "employees.id"; 替换为 String sortField = "employees.id_forSort"; 糟糕,我没有看到奇怪的代码在 getSort 方法中向字段名称添加后缀。然后消息就很奇怪了。您的索引会不会是空的?
  2. 不支持对多值字段进行排序。您可能会从一次执行中获得与另一次执行不同的结果,因为搜索引擎必须选择一个用于排序的值,而选择哪个值是未定义的。

无论技术方面如何,我都不确定您想要实现什么目标。您将获得 Company 实例作为结果,并希望它们按 Employee ID 排序,每个 Company 都有多个实例。这是什么意思?你想要优先拥有最年长员工的公司吗?还有别的事吗?如果您只是想稳定点击顺序,我建议您改用公司 ID。

关于java - 如何对indexedEmbedded中的字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57740285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com