我正致力于弹性搜索v1.1.1 我遇到了搜索查询的问题。我想知道如何解决下面的障碍
这是我的映射
{
"token" : {
"type" : "string"
}
}
索引记录中的数据是
{
token : "4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd"
}
我的搜索是
4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd
我想要记录的完全匹配,我需要使用哪个查询来获得记录的完全匹配 可以做到吗
QueryBuilders.queryString() ?
我用queryString()检查过,然后我最终确定它对完全匹配
没用请建议我
答案 0 :(得分:4)
您可以在字符串周围添加引号以进行完全匹配:
QueryBuilders.queryString("\"4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd\"");
如果您不想在上面的字符串索引上进行部分匹配,请使用该值的未标记版本并在其上进行搜索。在您的映射中添加:
"token": {
"type": "multi_field",
"fields": {
"untouched": {
"type": "string",
"index": "not_analyzed"
}
}
}
然后搜索:
{
"query": {
"match": {
"token.untouched": "4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd"
}
}
}
答案 1 :(得分:2)
更改映射,以便ElasticSearch在索引时不会触摸您的数据,如下所示:
{
"token" : {
"type" : "string",
"index": "not_analyzed"
}
}
然后像这样运行一个来自java的TermQuery
QueryBuilders.termQuery("token", "4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd");
这应该会给你完全匹配。