java - Hibernate Search - 在给定范围内搜索

标签 java hibernate lucene hibernate-search

假设我有以下类(class)。 (只包括最重要的东西)

public class Client {
    /* Some Properties */
}

public class ClientDocumentAssociation {
    @ManyToOne
    private Client client;

    /* Some Properties */
}

@Indexed
public class Document {
    @OneToOne
    private ClientDocumentAssociation clientAssociation;

    @Field(name = "text")
    private String text;

    /* Some Properties */
} 

我的基本文档搜索是这样的:

public List<AbstractDocument> searchDocuments(String text) {
    if (text == null) {
        return newArrayList();
    }

    FullTextEntityManager ftem = Search.getFullTextEntityManager(entityManagerProvider.get());
    MultiFieldQueryParser parser = new MultiFieldQueryParser(DOCUMENT_FIELDS, new StandardAnalyzer());
    parser.setDefaultOperator(Operator.AND);
    FullTextQuery ftq;

    try {
        Query q = parser.parse(text + "*");

        ftq = ftem.createFullTextQuery(q, Document.class);

        ftq.setMaxResults(20);

        List<AbstractDocument> results = ftq.getResultList();
        return results;
    } catch (ParseException e) {
        e.printStackTrace();
    }

    return newArrayList();
}

现在,我希望能够搜索文档,但不是在整个索引范围内,而是只查找属于给定客户端的文档。我唯一想到的是将关联添加到索引并将客户端 ID 添加到搜索中的适当字段。但这似乎不对。必须有另一种选择,这就是我所要求的。

最佳答案

为什么你最初的想法似乎是错误的?事实上,为搜索所需的所有数据建立索引是推荐的做法。这就是 @IndexedEmbedded 的用途。索引数据还可以让您更灵活地更改查询和/或新查询。

关于java - Hibernate Search - 在给定范围内搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2295715/

相关文章:

java - 当用于比较对象的所选字段相等时,Java 如何决定对具有多个字段的对象列表进行排序?

java - 当 string 在 HIVE 中隐式转换为 int 时会发生什么?

java - 无法使用Android在mysql中插入数据

java - 有一个带有计数子列的 Hibernate 实体 - 没有标量子查询

solr - 用于索引和查询的 Lucene 自定义分析器

lucene - 使用文档存储作为缓存

java - 如何在 smooks 中定义 ISA-Segment?

java - Hibernate ORA-02292 : integrity constraint (ROOT. SYS_C007062) 违反 - 找到子记录

java - Eclipse java项目突然停止工作

lucene - lucene 4.0中如何控制索引字段