我正在使用以下代码通过弹性搜索java api进行过滤,如果我使用字符串查询,它工作正常并返回结果,但如果我使用带空格或大写字母的文本则不返回任何数据
如果使用
String query={"bool":{"should":[{"term":{"name":"test"}}]}}
返回数据
如果我使用
String query={"bool":{"should":[{"term":{"name":"test airportone"}}]}}
或
String query={"bool":{"should":[{"term":{"name":"TEST"}}]}}
不返回数据
String query={"bool":{"should":[{"term":{"name":"test airport one"}}]}}
BoolQueryBuilder bool = new BoolQueryBuilder();
bool.must(new WrapperQueryBuilder(query));
SearchQuery searchQuery = new
NativeSearchQueryBuilder()
.withQuery(bool)
.build();
Page<Asset> asset =
elasticsearchTemplate.queryForPage(searchQuery,Asset.class);
return asset.getContent();
答案 0 :(得分:0)
根据您的使用情况,您有两种选择。
第一个选项:如果您想要利用ElasticSearch全文搜索功能,可以使用match
代替term
来搜索字符串。
{
"bool": {
"should": [{
"match": {
"name": "test airportone"
}
}]
}
}
第二个选项:您还可以在映射索引时指定name
字段为not analyzed
,以便ElasticSearch始终按原样存储它并始终获得准确的匹配。
"mappings": {
"user": {
"properties": {
"name": {
"type": "string"
"index": "not_analyzed"
}
}
}
}