gpt4 book ai didi

java - 多字段子集合中的 Hibernate 搜索/lucene 搜索

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:21 30 4
gpt4 key购买 nike

我在我的应用程序中使用 Hibernate Search。其中一个子集合被映射为 IndexedEmbedded。子对象有两个字段,一个是 id,另一个是日期(使用日期分辨率到毫秒)。当我搜索 id=1 (或某个值)并且 date 等于另一个时,我得到了所有第一个和第二个匹配的情况的结果。我只想获得两个字段在同一个 child 中匹配的记录,但我在不同的 child 中获得匹配,从而导致更高的结果。这是代码片段

主类是User

@Indexed
public class User {...

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

分数等级是 @索引 公开课分数{...

@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();

关于java - 多字段子集合中的 Hibernate 搜索/lucene 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27285442/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com