Lucene查询@indexedEmbedded对象id

时间:2014-07-16 13:41:04

标签: java hibernate lucene hibernate-search

我试图使用org.apache.lucene.search.Query来获取具有某个@id id的Object @indexedEmbedded的所有条目。这根本不适用于我当前的代码。我的代码如下:

搜索

FullTextSession fullTextSession = getFullTextSession();
QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Request.class).get();

org.apache.lucene.search.Query query = queryBuilder.keyword()
                .onField("keyword.id")
                .matching(keywordId)
                .createQuery();

FullTextQuery fullTextQuery = fullTextSession
                .createFullTextQuery(query, Request.class);

return fullTextQuery.list();

Request.class

@Entity
@Indexed
public class Request etc etc..

    @ManyToOne
    @IndexedEmbedded
    private Keyword keyword;

Keyword.class

@Entity
@Indexed
public class Keyword etc etc..

    @Id
    @GeneratedValue
    private Long id;

执行此代码时,我没有收到任何错误,结果不仅限于带有提供ID的关键字的Request对象。

我稍后会在与org.apache.lucene.search.BooleanQuery的联结中使用它,但即使在尝试这个时它也不起作用。我知道这可能是错误的做法,所以任何建议都会受到赞赏。

谢谢!

2 个答案:

答案 0 :(得分:0)

索引属性设置不正确,请求类的索引根本就没有索引。添加了以下代码来修复错误:

<property name="hibernateProperties">
    <props>
        ...
        <prop key="hibernate.search.default.indexBase">/var/lucene/indexes</prop>
        <prop key="hibernate.search.default.directory_provider">filesystem</prop>
        <prop key="hibernate.search.lucene_version">LUCENE_CURRENT</prop>
    </props>
</property>

答案 1 :(得分:0)

我知道问了这个问题已经有很长时间了,但是如果有人因为这个问题而落在这里,这是它的可行解决方案-

https://stackoverflow.com/a/58499826/3709922