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

过滤词查询不起作用-Elasticseach和java api

满俊楠
2023-03-14

我是stackoverflow的新手

这是我的问题

我想在ES中提出一个请求,首先执行必须然后执行过滤器。在sql中,它应该类似于下面的内容

SELECT * FROM table WHERE name = "the_name" AND type IN ("type1", "type2")

这是我对本案的实施

@Override
public List<Example> findByName(String pattern, String... types) {
    // Prepare query
    QueryBuilder queryBuilder = QueryBuilders.boolQuery()
            .must(QueryBuilders.termQuery("name", pattern))
            .filter(QueryBuilders.termsQuery("type", types));

    // Execute query    
    return new ArrayList<>(this.elasticsearchQuery.findAgainstFields(Example.class, queryBuilder));
}

接下来,我的方法findAgainstFields的实现

@SuppressWarnings("unchecked")
@Override
public <T> List<T> findAgainstFields(Class<?> t, QueryBuilder query) {
    NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();

    NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder
            .withIndices("my_indice")
            .withTypes(t.getSimpleName())
            .withSort(new ScoreSortBuilder().order(SortOrder.DESC))
            .withQuery(query)
            .withPageable(PageRequest.of(0, 5)).build();

    // Execute query
    return (List<T>) this.elasticsearchTemplate.queryForList(nativeSearchQuery, t);
}

当我运行这个项目时,这个方法(findByName)返回一个空数组。但是,当我删除. filter(QueryBuilders.termsQuery("type", type))时,我得到了一个结果。那么,我哪部分错了?

提前谢谢

ps:我使用ES 5.5和Java 8 oracle

更新

ES查询如下:

{
  "bool" : {
    "must" : [
      {
        "term" : {
          "name" : {
            "value" : "eso",
            "boost" : 1.0
          }
        }
      }
    ],
    "filter" : [
      {
        "terms" : {
          "type" : [
            "Society",
            "Institut"
          ],
          "boost" : 1.0
        }
      }
    ],
    "disable_coord" : false,
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}

所以在这里,我试图找到名称为eso的数据,类型可以是社会或研究所

共有1个答案

孟英叡
2023-03-14

问题出在映射文件中,而不是java源代码上。因此,我更新了文件,将属性类型的类型更改为关键字(之前是文本),一切正常。

 类似资料:
  • 问题内容: 以下HTML,Javascript和JSON可以正确呈现,但该过滤器根本不起作用。我们做错了什么? Javascript: 这两个JSON: api / distributors / my: api /仪表板/目录 问题答案: 角度过滤器无法将对象的对象作为输入。ng- repeat可以渲染它们,但是过滤器需要一个对象数组。解决此问题的最简单方法是让服务器返回没​​有命名键的数组。您还

  • 你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U

  • 所以,基本上,前端使用reactJS,后端Spring Boot(微服务,zuul充当网关),当然,如果没有CORS的东西,他们什么也做不了。 我们使用了这段代码 它起作用了,但不再起作用了。我正在使用Postman检查发送回来的标头,但这些都不在那里。 我该怎么办?我可以在每个微服务中使用一个简单的CORS过滤器,但让Zuul处理这一切会容易得多。因为无论如何所有请求都会通过它。 有什么建议吗?

  • 问题内容: 我有一个非常简单的查询,像这样: 我的默认设置是或某些用户ID,但是由于某种原因,该查询总是返回0行,我也尝试过,但还是没有运气,这可能是什么错误? EDTI 因此,在运行更多查询后,我发现我的问题是字段的默认值,因此我修改了查询,现在可以正常使用: 问题答案: NULL值需要特殊处理:http : //dev.mysql.com/doc/refman/5.1/en/working-w

  • 问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是

  • 我想让ElasticSearch在我的盒子上工作。我有以下映射: 所以我有一个“运动鞋”索引,它有一个“运动鞋”类型,一个“品牌”属性,它有一个“ID”和一个“标题”。 检查运动鞋是否存在,运行curl-xget“http://localhost:9200/sneakers/sneaker/1?prettley”,我得到: 现在,runningcurl-xget'http://localhost: