我第一次使用Hibernate Search,我有些疑惑。如果你能告诉我一些建议,我感激不尽。
我有以下实体:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Field(name = FIELD_LASTNAME, analyze = Analyze.YES, index = Index.YES)
private String name;
private int age;
.....
因此,对于年龄为25岁的搜索用户,我会执行以下操作:
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(User.class).get();
Query luceneQuery = qb.keyword().onFields("name").matching("Geor").createQuery();
Query jpaQuery = fullTextEntityManager
.createFullTextQuery(luceneQuery, User.class)
.setCriteriaQuery(fullTextEntityManager
.createCriteria(User.class)
.add(Restrictions.eq("user.age", 25)));
我的问题是:
提前致谢
答案 0 :(得分:1)
使用Criteria过滤信息是否正确? /什么时候有用呢?
没有。 Hibernate Search Lucene不应与Hibernate ORM Criteria查询混合使用。那是不支持的。您可以通过条件API设置的所有内容都是关联的获取模式。
我应该使用@Field索引属性“age”吗?
是
我应该索引我需要用来过滤的所有实体的属性吗?
绝对。使用Hibernate Search时最有效的搜索方法是确保搜索所需的所有信息都可以通过Lucene索引进行索引和搜索。然后,您可以使用例如布尔查询来组合不同的搜索条件。您还可能想要考虑如何索引某些属性。例如,如果您有数字,则可以将它们编入数字字段(请参阅@NumericField)。这将加快针对这些字段的范围查询。在某些情况下,您甚至可能希望使用自定义网桥。这一切都取决于您的用例以及您想要搜索的内容。
性能如何,使用索引值?
如果您需要全文搜索功能并且您将使用Hibernate Search,最好的方法是使用Hibernate Search查询。
如何选择lucene必须索引哪些值?
您最了解您的域名模型。您应该知道您现在需要搜索哪些字段。这些是您现在需要索引的最小字段。如果您以后可能需要其他字段,也可以添加它们,除非您真的担心索引大小。但是,这通常不是问题。即使你弄错了并且稍后需要索引字段,这只是添加所需注释然后重建索引的问题。出于特定目的,Search提供了一个非常强大的质量索引器API。
我希望这会有所帮助。