我正在使用以下查询来搜索文档:
QueryBuilder qb = matchQuery(
"username_field",
"user123"
);
SearchResponse response = Client().prepareSearch("users_dashboard").setQuery(qb)
.setSource("username_field")
.execute().actionGet();
但是我希望它返回给我一个包含确切用户名的文档。但是当前返回的是一个示例:
搜索
user123
返回以下所有内容:user123
user123 lastname
firstname user123
但是我只想返回
user123
。我正在使用Elasticsearch 2.1.0
最佳答案
您需要使用term query进行完全匹配。我假设您正在使用standard analyzer
(默认)作为user field
,因此您在inverted index
中具有以下标记
使用
match query
时,它将返回所有三个文档。您需要将用户字段映射为index : not_analyzed
,以便不执行任何分析。您的反向索引将如下所示。然后此查询将为您提供所需的结果
QueryBuilder qb = termQuery(
"username_field",
"user123"
);