【发布时间】:2019-09-10 09:57:46
【问题描述】:
我是 Elasticsearch 的新手。我正在尝试使用 ES 在 Spring Boot 应用程序中创建搜索,但我坚持使用 ES 中的查询。
这就是我的应用的样子。
型号:
@Entity
@Document(indexName = "sport", type = "sport")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Sport {
@Id
@GeneratedValue
private Long id;
@Column(length = 256)
private String name;
}
服务中的搜索方法:
@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;
}
上面模型的部分ES索引:
"content": [
{
"id": 2,
"name": "Muay Thai"
},
{
"id": 1,
"name": "Kickboxing"
},
{
"id": 3,
"name": "Boxing"
}
],
当我尝试使用 name 参数查找某些内容时,它始终坚持使用 id 并忽略 name。像这样:
SearchQuery 应该如何通过name 在id 中找到Sport?
【问题讨论】:
标签: spring-boot elasticsearch spring-data-elasticsearch elasticsearch-java-api elasticsearch-query