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

是否可以在Hibernate搜索中创建类似WHERE NOT IN(:values)的内容?

祁柏
2023-03-14

我正在积极地通过互联网搜索一些我知道可以完成的解决方案,但我很沮丧为什么它不能与Hibernate搜索一起工作。我要找的是类似于SQL子句的东西,其中不在(1,2,3)

我有两个实体,A和B。

@Indexed
public class A
{
   @Field
   public String field1;
   @FieldBridge(impl = LongBridge.class)
   public Long field2;
   @IndexEmbedded
   public Set<B> names;
}

public class B {
   @Field
   public String field3;
   @ContainedIn
   public Set<A> names2;
}

我正使用querybuilder运行搜索,如下所示:

queryBuilder.keyword()
                .fuzzy()
                .onFields("field1", "names.field3", "field2")
                .matching(matching+"-field2:(1 2 3)")
                .createQuery();

Edit2:我做错的是,我使用了单个查询和连接值,而field2的每个值都应该由另一个布尔连接来承载。现在很棒!

我做错了什么?我应该使用另一种机制吗?它甚至被Hibernate搜索支持吗?

共有1个答案

仲孙温文
2023-03-14

.keyword()...matching(...)的参数不是接受特殊字符的查询。此方法应以纯文本传递。不能在其中使用-:

如果所有这些内容都是由用户直接传递的,并且您确实需要接受运算符的内容,请查看simplequeryString()

如果过滤器是由开发人员自己提供的,只需使用bool查询。

Query includedQuery = queryBuilder.keyword()
                .fuzzy()
                .onFields("field1", "names.field3", "field2")
                .matching(matching)
                .createQuery();

BooleanJunction<?> combinedQueryBuilder = querybuilder.bool();
combinedQueryBuilder.must(includedQuery);
for (String excluded : Arrays.asList("1", "2", "3")) {
    combinedQueryBuilder.mustNot(queryBuilder.keyword()
                .fuzzy()
                .onField("field2")
                .matching(excluded)
                .createQuery());
}

Query combinedQuery = combinedQueryBuilder.createQuery();
 类似资料:
  • 使用Lucene libs,我需要对现有的搜索函数进行一些更改:假设以下对象: 名称:“端口对象1” 数据:"TCP(1)/1000-2000" 查询(或搜索文本)为“1142”,是否可以在数据字段内搜索“1142”并找到端口对象1,因为它指的是1000-2000之间的范围? 我只找到了数值范围查询,但这不适用于本例,因为我不知道范围。。。 参考以上代码。查询"1200"应该找到第一个doc。 L

  • 问题内容: 如何在Python中使类或方法抽象? 我尝试像这样重新定义: 但是现在,如果我创建一个像这样继承的类: 那么我也无法实例化,因为它调用了其超类的方法。 有没有更好的方法来定义抽象类? 问题答案: 使用该模块创建抽象类。使用装饰器来声明方法摘要,并根据您的Python版本使用以下三种方式之一声明类摘要。 在Python 3.4及更高版本中,您可以从继承。在Python的早期版本中,您需要

  • 问题内容: 是否可以创建内联伪样式? 例如,我可以做以下事情吗? 这背后的原因是我正在开发一个创建UI元素的.NET库。我想生成无需设置外部样式表即可设置其悬停状态的HTML元素。 问题答案: 不幸的是,不能,您不能使用内联CSS来实现悬停效果。 此问题的(较差)解决方法是让控件在呈现时呈现样式块。例如,您的控件可以呈现为: 如果您可以强迫用户在页面顶部放置“样式控件”,则可以在其中渲染所有自定义

  • 问题内容: 我目前正在尝试完成一个项目,其中的规范是使用搜索表单来搜索包装数据库。该数据库具有许多变量,包括大小,名称,类型和肉类。我需要创建一个搜索表单,用户可以在其中使用多种不同的搜索进行搜索(例如搜索50厘米长的盖子托盘)。 我花了整整一天的时间来尝试创建一些PHP代码,这些代码可以在我创建的测试数据库中搜索信息。我遇到了许多错误,从mysql_fetch_array错误,布尔错误到现在,我

  • 问题内容: 我正在尝试扩展库以进行集成,并通过将config设置为自动(可移植)来实现,这意味着以编程方式添加元素。(我知道可以通过Hibernate 或EclipseLInk来实现,但是- 可移植性)。我也想避免仅用于此单一目的。 我可以动态创建一个,并用指定包中的元素填充它(通过Reflections库)。当我尝试将其提供给提供程序时,问题就开始了。我能想到的唯一方法是设置一个,但我想不出什么

  • 问题内容: 我正在考虑将Java用于大型项目,但是我找不到能够在Java中远程表示结构的任何东西。我需要能够将网络数据包转换为可在应用程序中使用的结构/类。 我知道这是可以使用,但这种方式是 不 接受的。因此,我很好奇是否可以像在C语言中那样将一组字节“广播”到一个结构中。如果这不可能,那么我将无法使用Java。 因此,我要问的问题是,是否有可能无需指定对齐方式和数据类型就将任何类型的对齐数据都转