簡體   English   中英

Hibernate搜索/ lucene搜索多個字段的子集合

[英]Hibernate search / lucene search in multiple fields child collections

我在我的應用程序中使用Hibernate Search。 其中一個子集合映射為IndexedEmbedded。 子對象有兩個字段,一個是id,另一個是date(使用date resoultion到milliseconds)。 當我搜索id = 1(或某個值)並且date等於另一個時,我得到第一個和第二個匹配的所有情況的結果。 我想只得到兩個字段在同一個孩子中匹配的記錄,但我在不同的孩子中得到匹配,從而產生更高的結果。 這是代碼的片段

主要類是用戶

@Indexed
public class User {...

@IndexedEmbedded(prefix = "score_")
public List<Score> getScores() {...}

分數類是@Indexed公共類分數{...

@Id
@DocumentId
public Integer getId() {...}

@Field
public Integer value

@Field(analyze = Analyze.NO, indexNullAs="_null_")
@DateBridge(resolution = Resolution.MILLISECOND)
public Date getScoreTime()

在我的搜索代碼中,我正在執行以下操作

QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();

BooleanQuery subQuery = new BooleanQuery();
subQuery.add(queryBuilder.keyword().onField("score_id").matching(20).createQuery(), BooleanClause.Occur.MUST);
subQuery.add(queryBuilder.keyword().onField("score_scoreTime").ignoreFieldBridge().matching("_null").createQuery(), BooleanClause.Occur.MUST);

搜索值字段(而不是scoreTime)具有相同的行為。 如果我在任何字段上單獨搜索,我會得到正確的結果。

有什么建議么?

你試過這個語法嗎?

//look for users whos id is 1 and createDate is more than lastMonth
Date lastMonth = ...;
QueryBuilder userQB = searchFactory.buildQueryBuilder().forEntity( User.class ).get();

Query luceneQuery = userQB
    .bool()
      .must( userQB.keyword().onField("id").matching("1").createQuery() )
      .must( userQB.range().onField("creationDate").above(lastMonth)
        .createQuery() )
    .createQuery();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM