首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修正少量参数的SearchQuery -弹性搜索和弹簧启动

修正少量参数的SearchQuery -弹性搜索和弹簧启动
EN

Stack Overflow用户
提问于 2019-09-10 09:57:46
回答 2查看 88关注 0票数 1

我是Elasticsearch的新手。我试图使用ES在Spring应用程序中创建搜索,并在ES中继续执行查询。

这就是我的应用程序的样子。

型号:

代码语言:javascript
复制
@Entity
@Document(indexName = "sport", type = "sport")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Sport {

   @Id
   @GeneratedValue
   private Long id;

   @Column(length = 256)
   private String name;

}

服务中的搜索方法:

代码语言:javascript
复制
@GetMapping(value = "/findSportByNameAndId/{name}/{id}")
public List<Sport> findSportByNameAndId(@PathVariable String name, @PathVariable String id){

    SearchQuery searchQuery = new NativeSearchQueryBuilder()
            .withQuery(matchQuery("name", name)
                    .operator(AND)
                    .fuzziness(Fuzziness.TWO)
                    .prefixLength(3))
            .withQuery(matchQuery("id", id)
                    .operator(AND))
            .build();

    List<Sport> sports = operations.queryForList(searchQuery, Sport.class);
    return sports;
}

根据上述模型,专家系统的部分索引:

代码语言:javascript
复制
"content": [
    {
        "id": 2,
        "name": "Muay Thai"
    },
    {
        "id": 1,
        "name": "Kickboxing"
    },
    {
        "id": 3,
        "name": "Boxing"
    }
],

当我尝试使用name参数查找某些内容时,它总是坚持使用id,忽略name。就像这样:

SearchQuery应该如何通过nameid中找到Sport

EN

Stack Overflow用户

回答已采纳

发布于 2019-09-10 14:04:06

最后,我意识到了如何解决这个问题。在这种情况下,我需要使用QueryBuilder来指定每个参数:

代码语言:javascript
复制
@GetMapping(value = "/findSportByNameAndId/{name}/{id}")
public List<Sport> findSportByNameAndId(@PathVariable String name, @PathVariable String id){

    QueryBuilder qb = QueryBuilders.boolQuery()
            .must(QueryBuilders.matchQuery("name", name)
                    .operator(AND)
                    .fuzziness(Fuzziness.TWO)
                    .prefixLength(3)
            )
            .filter(QueryBuilders.termQuery("id", id));

    SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(qb).build();

    List<Sport> sports = operations.queryForList(searchQuery, Sport.class);
    return sports;
}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57868329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档