私はLucene検索を休止するのが初めてです。私のアプリケーションでは、私は冬眠Luceneがトランザクションを認識していない古いデータがあります。その古いデータでは、インデックスを手動で作成しているので、魅力的に機能していますが、新しく挿入/更新されたレコードの結果は得られません。しかし、その時点で手動でインデックスを作成している場合は、そのレコードが来ています。私はハイバネートORMインデックスを介して挿入/更新されるレコードは自動的に更新されると私は思う?はい、ここに来ていない理由を意味する場合は、私にいくつかの提案を助けてください。なぜHibernate Searchは新しく挿入されたレコードを与えていないのですか?
これは私の検索コード私のスニペット
fullTextSession.createIndexer().startAndWait();
です:
MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "skills.skill","role" },
new StandardAnalyzer());
parser.setDefaultOperator(Operator.OR);
org.apache.lucene.search.Query luceneQuery = null;
QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Student.class).get();
BooleanQuery boolQuery = new BooleanQuery();
boolQuery.add(qb.keyword().onField("vstatus").matching(1).createQuery(), BooleanClause.Occur.MUST);
boolQuery.add(qb.range().onField("percentage").from(80).to(100).createQuery(),
BooleanClause.Occur.MUST);
FullTextQuery createFullTextQuery = fullTextSession.createFullTextQuery(boolQuery, Student.class);
createFullTextQuery.setProjection("studentId", "firstName","lastName","personal.city",);
return createFullTextQuery.list();
後は
@Entity
@Table(name="student")
@Component
@Indexed(index="student")
public class Student
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="student_id")
private long studentId;
@Column(name="first_name")
@Field(store=Store.YES)
private String firstName;
@Column(name="last_name")
@Field(store=Store.YES)
private String lastName;
@Column(name="visibility_status",columnDefinition="TINYINT")
@Field(analyze=Analyze.YES,index=Index.YES)
private int vstatus;
@OneToOne(mappedBy="student",cascade=CascadeType.ALL)
@IndexedEmbedded
private ProfileSummary profileSummary;
@OneToOne(mappedBy="student",cascade=CascadeType.ALL)
@IndexedEmbedded
private PersonalInfo personal;
@OneToMany(mappedBy="student",cascade=CascadeType.ALL)
@IndexedEmbedded
private List<StudentSkills> StudentSkills = new ArrayList<StudentSkills>();
//setters & getters
}
========================
@Entity
@Table(name="profile_summary")
@Indexed(index="ProfileSummary")
@AnalyzerDef(name = "summaryAnalyzer",
tokenizer = @TokenizerDef(factory = WhitespaceTokenizerFactory.class),
filters = {
@TokenFilterDef(factory = LowerCaseFilterFactory.class),
})
public class ProfileSummary implements Serializable
{
private static final long serialVersionUID = 4672310608280406464L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="profile_summary_id")
private long ProfileSummaryId;
@OneToOne
@JoinColumn(name="student_student_id")
private Student student
@Column(name="profile_percentage")
@Analyzer(definition = "summaryAnalyzer")
@Field(index=Index.YES, store=Store.NO)
private int percentage ;
}
@Entity
@Table(name="student_skills")
public class StudentSkills
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="student_skill_id")
private long studentSkillId;
@ManyToOne
@JoinColumn(name="student_student_id")
private Student student
@ManyToOne
@JoinColumn(name="skills_skill_id")
@IndexedEmbedded
private Skills skills;
}
Similary私のマッピング実体である私は、スキル
1.Iはindexing_strategyに関連するすべてのプロパティを言及していません。 2.Andトランザクションに関連するエラーはありません。実際には私の問題は何ですか、上のスニペットの主なエンティティはStudent.classです。同じような関係のDummyStudent.classというエンティティがもう1つあります.DummyStudent.classを使用しています私の春のアプリケーションを介して来ている実際のデータです。ダミーデータを格納するために私はHibernate session.DummyStudent.classを介して永続的な別のGUIを作成しました両方の場合に働いています。同じことwrt学生 –