Как связать хранилище данных с документом, используя ключ
Я буду очень благодарен, если кто-то может помочь мне решить эту проблему, так как я уже потратил на это много времени.
Интерфейс моего приложения отправляет данные о сотрудниках на сервер, который создает объект Emmployee и сохраняет данные в хранилище данных. Мое приложение предоставляет функцию поиска по ключевым словам по названию, компании и jobDesc, поэтому я использую Search Api.
Проблема в том, что я хочу использовать хранилище данных для хранения полных данных и документ для хранения доступных для поиска данных. Как я могу связать хранилище данных с документом? Я знаю, что это может быть достигнуто, если я задаю ключ сотрудника в качестве идентификатора документа, но проблема в том, как мне получить ключ данных, которые хранятся. Если я пытаюсь получить ключ с помощью e.getKey(), который, очевидно, возвращает nullPointerException, потому что у него есть ключ в то время.
Я могу добиться этого, прочитав все данные о сотрудниках, хранящиеся в хранилище данных, и создав с ними документ и установив ключ сотрудника в качестве идентификатора документа, но я хочу создать документ, когда данные будут получены из внешнего интерфейса приложения.
//EmployeeServlet
PersistenceManager pm = PMF.get().getPersistenceManager();
Employee e = new Employee(title, company, location, category,
jobType, gender,
careerLevel, salaryRange,
sector, jobDesc);
Document newDoc = Document.newBuilder().setId(???)
.addField(Field.newBuilder().setName("title").setText(title))
.addField(Field.newBuilder().setName("company").setText(company))
.addField(Field.newBuilder().setName("jobDesc").setText(jobDesc)).build();
SearchIndexManager.INSTANCE.indexDocument("Employee", newDoc);
pm.makePersistent(e);
//Employee
@PersistenceCapable
public class Employee {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;
@Persistent
private String title;
@Persistent
private String company;
@Persistent
private String location;
@Persistent
private String category;
@Persistent
private String jobType;
@Persistent
private String gender;
@Persistent
private String careerLevel;
@Persistent
private String salaryRange;
@Persistent
private String sector;
@Persistent
private Text jobDescription;
public Employee(String title, String company, String location,
String category,
String jobType, String gender,
String careerLevel, String salaryRange,
String sector,
String jobDescription) {
super();
this.title = title;
this.company = company;
this.location = location;
this.category = category;
this.jobType = jobType;
this.gender = gender;
this.careerLevel = careerLevel;
this.salaryRange = salaryRange;
this.sector = sector;
this.jobDescription = new Text(jobDescription);
}
}
1 ответ
- Сохранить сотрудника юридического лица. Получить идентификатор.
- Установите этот идентификатор как идентификатор документа, индексируйте документ.
Оба шага могут быть выполнены в одном вызове сервера. Просто переместите makePersistent(), прежде чем создавать документ.