当前位置: 首页 > 面试题库 >

如何使用Lucene API(a AND(b OR c))创建嵌套的布尔查询?

柳杰
2023-03-14
问题内容

我有一个带有三个字段(userId,标题,描述)的索引对象。我想找到标题或说明包含给定关键字的特定用户的所有对象。

我有这样的事情(但这显然是错误的):

WildcardQuery nameQuery = new WildcardQuery(new Term("name", filter.getSearch()));
WildcardQuery descQuery = new WildcardQuery(new Term("description", filter.getSearch()));

TermQuery userQuery = new TermQuery(new Term("user_id", u.getId()+""));

BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(new BooleanClause(name_query, Occur.SHOULD));
booleanQuery.add(new BooleanClause(desc_query, Occur.SHOULD));
booleanQuery.add(new BooleanClause(user_query, Occur.MUST));

如何修改代码以获取具有正确ID和标题或描述中的搜索短语的所有对象?


问题答案:

我认为将是这样的:

TermQuery userQuery = new TermQuery(new Term("user_id", u.getId()+""));

BooleanQuery orQuery = new BooleanQuery();
orQuery.add(new BooleanClause(name_query, Occur.SHOULD));
orQuery.add(new BooleanClause(desc_query, Occur.SHOULD));

BooleanQuery andQuery = new BooleanQuery();
andQuery.add(new BooleanClause(userQuery , Occur.MUST));
andQuery.add(new BooleanClause(orQuery, Occur.MUST));


 类似资料:
  • 问题内容: 我正在使用Nest Elastic并使用Head插件为布尔搜索构建查询,我正在合并多个查询 有关数据库结构和弹性映射的注释 数据库中的每个文档都链接到特定的profileId,后者又具有多个属性 每个文档都有与其关联的多个属性值 在此查询中,我要获取具有特定配置文件和属性值> 30的所有文档,同时要记住,此属性应仅具有ID 2。 SQL查询: 从文档d内部联接attributeValu

  • 问题内容: 我试图解析嵌套的布尔表达式,并分别获取表达式内的各个条件。例如,如果输入字符串是: (A = a OR B = b OR C = c AND((D = d AND E = e)OR(F = f AND G = g))) 我想以正确的顺序得到条件。即 D = d AND E = e OR F = f AND G = g AND A = a OR B = b OR C = c 我正在使用A

  • 我试图在ElasticSearch中构建以下查询: 是否可以使用elasticsearch使用“或真”部分,或者有其他方法构造查询以给出相同的结果? 我有一组文档,比如说10个,都匹配tag1,这10个文档中的一些还匹配tag2和tag3,如果是这样,我将使用命名查询来告诉我哪些文档匹配tag2和tag3(匹配tag2和tag3的文档是匹配tag1的文档的子集)。 但是,即使没有匹配tag2或ta

  • 我之前发布了一个类似的问题,但我已经打开了另一个问题,因为前一个问题给了我一个解决方案,但我现在遇到了另一个问题。 我们有一个现有的Oracle数据库,它有这样定义的布尔列 和与相应的java字段定义像我已经开始理解这是因为Oracle没有布尔数据类型,但在引擎盖下做从布尔到整数的转换时插入数据,和反过来检索数据。 当我正在将数据库从Oracle迁移到Postgres时,这引起了一个问题。由于对我

  • 问题内容: 我正在尝试从Go可执行文件(例如’dir1 / dir2 / dir3’)创建一组嵌套目录。我已成功创建以下一行的目录: 但是,我不知道如何在该目录内创建预定的嵌套目录集。 问题答案: 用于创建单个目录。要创建文件夹路径,请尝试使用: 转到文档 func MkdirAll(路径字符串,烫发FileMode)错误 MkdirAll创建一个名为path的目录以及所有必要的父目录,并返回ni

  • 问题内容: 使用嵌套对象的布尔运算符时遇到一些麻烦。这是我的映射: 我想获取恰好包含两个指定ip甚至更多的文档。 假设我的文档具有以下ips: 我想通过使用此过滤器进行搜索来仅检索DOC 1: 问题在于,同时检索了DOC 1和DOC2。 问题答案: 你可以使用你的条件过滤器是这样的: 这是我用来测试的一些代码: http://sense.qbox.io/gist/d6b5f4e4c0d2977a0