当前位置: 首页 > 知识库问答 >
问题:

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

羊慈
2023-03-14

我在我的应用程序中使用Hibernate搜索。其中一个子集合映射为IndexeDemBedded。子对象有两个字段,一个是id,另一个是date(使用date resoultion到毫秒)。当我搜索ID=1(或某个值)并且date等于另一个值时,我会得到第一个和第二个匹配的所有情况的结果。我只想在同一个孩子中获得两个字段匹配的记录,但我在不同的孩子中获得匹配,结果会高得多。下面是代码片段

主类是用户

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

共有1个答案

尹赞
2023-03-14

您是否尝试过以下语法:

//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();
 类似资料:
  • 我有:一个实体有一个的集合,每个阶段都有一个的集合。Stage项可以有几种类型,我在JPA/Hibernate中使用它们作为带有鉴别器列的继承策略。 我需要lucene查询返回在类型a的阶段项(类中的字段)中具有特定细节的请求。我无法让hibernate搜索查看子类中的字段。 因此这个lucene查询不起作用(返回0个结果): 但基于中的字段进行搜索有效:

  • 我正在使用Hibernate Search/Lucene Intégration开发一个J2E应用程序。我索引文档(和其他实体),并希望对其进行不区分重音的搜索(内容和类的字段)。 这样做好吗?是否没有param或conf属性让FrenchAnalyzer忽略重音? 谢谢

  • 我使用Mongodb和我的数据库模式,如下所示: 我要找到所有的记录,名字+名字喜欢‘瓦希德kh’。在SQL中,这将是: 从firstName+lastName类似“%Vahid KH%”的表中选择*

  • 在测试此文本时,我在要在文本中搜索的列上创建了lucene(3.0.1)索引: 如果我按关键字搜索,它会给出结果,但按 我正在使用standardAnalyzer: 因为已设置,它应创建令牌,并且应存在$GLD。Analyzer将从文本中删除停止字,因为word也将在该过程中删除。

  • 编辑1:我也试过这个,但同样的问题。