1

我正在从事 Spring 和 Hibernate 项目,并且正在使用 Hibernate Lucene Search。它搜索得很好,但是在显示结果时它会像这样显示(即,如果我搜索标题)

 [id: 10 | title:easylib, id: 11 | title:IBM, id: 12 | title:Wipro]

但我想要的是它应该只显示'Wipro',而不是它的 id 或其他东西

这是我的代码(在标题的 POJO 类中):

@Field(index = Index.YES, analyze = Analyze.YES, store = Store.YES)
@Column(name = "title", nullable = false, length = 150)
public String getTitle() {
    return this.title;
}

public void setTitle(String title) {
    this.title = title;
}

这是在我的 DAO 课程中

private void doIndex() throws InterruptedException {
            Session session = getSession();

            FullTextSession fullTextSession = Search.getFullTextSession(session);
            fullTextSession.createIndexer().startAndWait();

        }

       private List<CatalogueBase> searchTitle(String queryString) {
            Session session = getSession();
            FullTextSession fullTextSession = Search.getFullTextSession(session);       
            QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(CatalogueBase.class).get();
            org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword().onFields("subTitle","publishedplace","title").matching(queryString).createQuery();   
            org.hibernate.Query fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, CatalogueBase.class);           
            List<CatalogueBase> contactList = fullTextQuery.list();
            return contactList;
        }

    @Override
    public List<CatalogueBase> getSearchDao(String search) throws InterruptedException {
        doIndex();
        List<CatalogueBase> result = searchTitle(search); 
        return result;
    }
4

3 回答 3

1

我得到了答案,我的错误是

前:

@Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder("id: ").append(this.getId()).append(" | title:").append(this.getTitle());
        return stringBuilder.toString();
    }

后:

@Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder().append(this.getTitle());
        return stringBuilder.toString();
    }
于 2013-08-09T04:33:10.117 回答
0

查询代码不会呈现您正在“显示”的此输出。我认为您可能只是在结果上调用toString()方法List<CatalogueBase>。您说您从查询中获得了正确的结果,现在只需转换 CatalogueBase 实例。

加载 CatalogueBase 实例的另一种方法是使用投影:

org.hibernate.Query fullTextQuery = fts.createFullTextQuery(luceneQuery, CatalogueBase.class);
fullTextQuery.setProjection("title");
List contactList = fullTextQuery.list();
于 2013-08-08T21:54:42.210 回答
0

确保@Field(store = Store.YES)在您的字段上添加此注释,然后使用fullTextQuery.setProjection("title");只有它才会起作用。

于 2017-04-10T07:42:35.640 回答