【问题标题】:ElasticSearch query for uuid fielduuid 字段的 ElasticSearch 查询
【发布时间】:2022-01-19 11:24:23
【问题描述】:

我想查询其中一个字段包含字符串格式的 uuid 值的 elasticsearch 记录。这是记录结构

{
"field1": "test 1",
"field2": "testing 1",
"field3": "c48718a5-d715-4fbd-8a53-40707c83b2ce.eb47d75e-6b2f-403c-9e56-f1569d5b40d0"
},
{
"field1": "test 2",
"field2": "testing 2",
"field3": "c48718a5-d715-4fbd-8a53-40707c83b2ce.eb47d75e-6b2f-403c-9e56-f1569d5b40d0.d0644d62-f079-46ee-ab98-30d8d16977c2"
}

我的查询看起来像这样

{
   "query": {
       "query_string": {
           "query": "(field1:test) AND (field3:c48718a5-d715-4fbd-8a53-40707c83b2ce.eb47d75e-6b2f-403c-9e56-f1569d5b40d0)",
           "default_operator": "and"
       }
   }
}

这是 field3 的映射

"field3": {
           "type": "text",
           "fields": {
              "keyword": {
                 "type": "keyword",
                 "ignore_above": 256     
              }
            }
 }

问题是当我运行此查询时,elasticsearch 正在发送两条记录。我只想获取第一条记录。这里 elasticsearch 匹配 field3 中提供的字符串,但我想要字段值等于给定值的记录。

请提出建议。谢谢。

【问题讨论】:

    标签: java elasticsearch elasticsearch-5


    【解决方案1】:

    你快到了。你只需要使用field3.keyword 而不是field3。这使用关键字分析器而不是标准分析器(注意 field3 字段后的“.keyword”)。

    将您的搜索查询修改为

    {
       "query": {
           "query_string": {
               "query": "(field1:test) AND (field3.keyword:c48718a5-d715-4fbd-8a53-40707c83b2ce.eb47d75e-6b2f-403c-9e56-f1569d5b40d0)",
               "default_operator": "and"
           }
       }
    }
    

    此外,您可以从搜索查询中删除default_operator,因为您已经在query 部分中添加了AND

    【讨论】:

    • 这行得通。非常感谢!!
    猜你喜欢
    • 2016-08-18
    • 2022-12-04
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    相关资源
    最近更新 更多