如何在elasticsearch(java API)中使用queryString()?

时间:2014-07-11 12:16:37

标签: java elasticsearch

我正致力于弹性搜索v1.1.1 我遇到了搜索查询的问题。我想知道如何解决下面的障碍

这是我的映射

{
  "token" : {
               "type" : "string"
            }
}

索引记录中的数据是

 {
   token : "4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd"
 }

我的搜索是

4r5etgg-kogignjj-jdjuty687-ofijfjfhf-kdjudyhd

我想要记录的完全匹配,我需要使用哪个查询来获得记录的完全匹配 可以做到吗

  QueryBuilders.queryString() ?

我用queryString()检查过,然后我最终确定它对完全匹配

没用

请建议我

2 个答案:

答案 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");

这应该会给你完全匹配。