当前位置: 首页 > 面试题库 >

在Elastic Search中对数组元素进行查询字符串搜索

薛欣德
2023-03-14
问题内容

我正在尝试通过一个简单的示例应用程序学习Elasticsearch,该应用程序列出了与人相关的报价。映射示例如下所示:

{ 
  "people" : {
    "properties" : {
      "name" : { "type" : "string"},
      "quotations" : { "type" : "string" }
    }
  }
}

一些示例数据可能看起来像:

{ "name" : "Mr A",
  "quotations" : [ "quotation one, this and that and these"
                 , "quotation two, those and that"]
}

{ "name" : "Mr B",
  "quotations" : [ "quotation three, this and that"
                 , "quotation four, those and these"]
}

我希望能够对单个引用使用querystring api,并返回匹配的人。例如,我可能想查找报价包含(此与这些)的人-应该返回“ A先生”而不是“
B先生”,依此类推。我该如何实现?

编辑1:

安德烈(Andrei)在下面的回答似乎可行,数据值现在看起来像:

{"name":"Mr A","quotations":[{"value" : "quotation one, this and that and these"}, {"value" : "quotation two, those and that"}]}

但是,我似乎无法使query_string查询正常工作。以下没有结果:

{
  "query": {
    "nested": {
      "path": "quotations",
      "query": {
        "query_string": {
            "default_field": "quotations",
            "query": "quotations.value:this AND these"
        }
      }
    }
  }
}

有没有办法让query_string查询与嵌套对象一起工作?

Edit2:是的,请参阅Andrei的答案。


问题答案:

为了达到该要求,您需要查看嵌套对象,而不是查询平整的值列表,而是查询该嵌套对象中的各个值。例如:

{
  "mappings": {
    "people": {
      "properties": {
        "name": {
          "type": "string"
        },
        "quotations": {
          "type": "nested",
          "properties": {
            "value": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

值:

{"name":"Mr A","quotations":[{"value": "quotation one, this and that and these"}, {"value": "quotation two, those and that"}]}
{"name":"Mr B","quotations":[{"value": "quotation three, this and that"}, {"value": "quotation four, those and these"}]}

查询:

{
  "query": {
    "nested": {
      "path": "quotations",
      "query": {
        "bool": {
          "must": [
            { "match": {"quotations.value": "this"}},
            { "match": {"quotations.value": "these"}}
          ]
        }
      }
    }
  }
}


 类似资料:
  • 本文向大家介绍MySQL查询以字符串字段中的数字字符对行进行分组?,包括了MySQL查询以字符串字段中的数字字符对行进行分组?的使用技巧和注意事项,需要的朋友参考一下 为此,您可以在+运算符的帮助下将0与字符串字段连接起来。这里的场景就像我们需要从字符串字段“ 9844Bob ”中获取数字“ 9844 ”。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所

  • 问题内容: 我有一个非常基本的“用户”索引,其中一个类型为“用户”,其中有多个字段。除此之外,我在索引上没有任何定义。 我需要做的是提供自动完成的结果,该结果优先考虑前缀匹配(用于用户名),但还包含来自用户bio和网站的其他匹配以及其他字段的子字符串匹配。 如何使用查询DSL完成此操作? 问题答案: 有多种方法可以实现您想要的。我会说这取决于您要进行前缀匹配的方式。您可以使用“ 前缀查询”,也可以

  • 问题内容: 我在C#中使用elasticsearch.net库,并尝试查询与指定过滤器匹配的对象。 我希望查询返回对象,其中对象的Names集合中至少存在来自过滤器的输入名称之一。 问题是此查询的结果总是使我命中0次,即使我确定数据库中确实存在与指定过滤器匹配的数据,我也想找出我的查询出了什么问题… 该模型: 过滤对象: 查询数据的方法: 我也尝试过以下查询,但都没有产生预期的结果: 适用于我的解

  • 我正在做一个简单的查询\u字符串查询,如下所示: 然而,搜索将文档与不一定相邻的单词“南部”和“西部”进行匹配,例如“我们在英格兰南部和西部看到低飞的秃鹰”。我希望它只返回与确切短语匹配的结果,例如“我们在白金汉郡西南部看到低飞的秃鹰”。 用于搜索和索引的分析器是雪球分析器,我猜这可能是问题的根源,即短语查询不适用于雪球分析器吗? 有什么想法吗? 蒂亚 多米尼克

  • 问题内容: 如何在上面的数组中松散搜索“ Last”一词? 上面的代码仅在指针与值中的所有内容完全匹配时才回显值的键,这是我不想要的。我想要这样的东西: 如果值包含单词“ Last”,我希望值的键回显。 问题答案: 要查找符合搜索条件的值,可以使用函数: 现在,数组将仅包含原始数组中包含单词 last (不区分大小写)的元素。 如果需要查找与条件匹配的值的键,则需要遍历数组: 现在,数组包含原始数

  • 问题内容: Elasticsearch版本:7.1.1 嗨,我做了很多尝试,但是在索引中找不到任何解决方案,我有一个包含字符串的字段。 因此,例如,我有两个文档,它们在locations数组中包含不同的值。 文件1: 文件2: 用户请求搜索术语 克洛彭堡, 而我只想返回那些包含术语 克洛彭堡 而不是 Landkreis Cloppenburg的 文档。结果应仅包含 Document-1 。但是我的