Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于条件的Hibernate搜索性能建议_Java_Performance_Hibernate_Hibernate Search - Fatal编程技术网

Java 关于条件的Hibernate搜索性能建议

Java 关于条件的Hibernate搜索性能建议,java,performance,hibernate,hibernate-search,Java,Performance,Hibernate,Hibernate Search,我第一次使用Hibernate搜索,我有一些疑问。如果你能告诉我一些建议,我将不胜感激 我拥有以下实体: @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Field(name = FIELD_LASTNAME, analyze = Analyze.YES, index = Index.YES) private String na

我第一次使用Hibernate搜索,我有一些疑问。如果你能告诉我一些建议,我将不胜感激

我拥有以下实体:

@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)));
我的问题是:

  • 使用条件筛选信息是否正确?/什么时候使用它有用
  • 我应该使用@Field为属性“age”编制索引吗
  • 我是否应该索引所有需要用于筛选的实体属性
  • 性能如何,是否使用索引值
  • 如何选择lucene必须索引哪些值
  • 提前谢谢

    使用条件筛选信息是否正确?/什么时候使用它有用

    不可以。Hibernate搜索Lucene不应与Hibernate ORM条件查询混合使用。这是不受支持的。通过CriteriaAPI可以设置的只是关联的获取模式

    我应该使用@Field为属性“age”编制索引吗

    我是否应该索引所有需要用于筛选的实体属性

    当然。使用Hibernate搜索时,最有效的搜索方法是确保搜索所需的所有信息都已编入索引,并可通过Lucene索引进行搜索。然后使用例如布尔查询来组合不同的搜索条件。您可能还想考虑如何为某些属性编制索引。例如,如果您有数字,则可以将其作为数字字段进行索引(请参见@NumericField)。这将加快对这些字段的范围查询。在某些情况下,您甚至可能希望使用自定义桥。这完全取决于您的用例和您想要搜索的内容

    性能如何,是否使用索引值

    如果您需要全文搜索功能,并且打算使用Hibernate搜索,那么最好的方法就是只使用Hibernate搜索查询

    如何选择lucene必须索引哪些值

    您最了解您的域模型。您应该知道现在需要搜索哪些字段。这些是您现在需要索引的最小字段。如果以后还需要其他字段,也可以添加它们,除非您真的担心索引大小。然而,这通常不是问题。即使您弄错了,以后需要为字段编制索引,这也只是添加所需注释然后重建索引的问题。为此,Search提供了一个非常强大的mass indexer API


    我希望这能有所帮助。

    非常感谢您的回答。但是,您为什么说“Hibernate Search Lucene不应该与Hibernate ORM条件查询混合使用。这是不受支持的。”?在我的例子中,我使用的是标准,它是有效的。我正在得到结果。它不受支持,您可能会得到错误的结果。检查Hibernate搜索文档,它包含一个关于这一点的警告。