当前位置: 首页 > 知识库问答 >
问题:

如何在Elasticsearch中搜索查询的文档?

严昊昊
2023-03-14

我是Elasticsearch的新手,我面临一个问题。我的任务是搜索一组文档。例如,我有这样结构的数据:

type Doc struct{
   id string
   project_id string
   code string
   name string
   status string
}

但是困难的是,我如何获取所有带有project_id=abc的文档,然后通过与关键字“测试”匹配的任何其他字段(代码、名称、状态)搜索它们(例如)。我如何在Elasticsearch查询中做到这一点,请帮助我!

谢谢

共有2个答案

花品
2023-03-14

这是我的解决办法

GET /[index_name]/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "some text here"
          }
        }
      ],
      "filter": [
        {
          "term": {
            "project_id.keyword": "abc"
          }
        }
      ]
    }
  }
}
刁冠宇
2023-03-14

您可以使用与其他查询的布尔组合匹配的文档匹配的布尔查询。

必须与逻辑与运算符相同,应该与逻辑与运算符相同

添加具有索引数据、搜索查询和搜索结果的工作示例

索引数据:

{
  "id": 2,
  "project_id":"abc",
  "code": "a",
  "name":"bhavya",
  "status":"engineer"
}
{
  "id": 1,
  "project_id":"abc",
  "code": "a",
  "name":"bhavya",
  "status":"student"
}
{
  "id": 3,
  "project_id":"def",
  "code": "a",
  "name":"deeksha",
  "status":"engineer"
}

搜索查询:

给定查询满足以下条件:"project_id"="abc"AND"name":"bhavya"AND"status":"学生"

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "project_id": "abc"
          }
        },
        {
          "match": {
            "name": "bhavya"
          }
        },
        {
          "match": {
            "status": "student"
          }
        }
      ]
    }
  }
}

搜索结果:

"hits": [
      {
        "_index": "stof_64274465",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.7021472,
        "_source": {
          "id": 1,
          "project_id": "abc",
          "code": "a",
          "name": "bhavya",
          "status": "student"
        }
      }
    ]
 类似资料:
  • 这是我得到的响应输出- 2018-11-20 18:25:34+0530:>{“查询”:{“布尔”:{“必须”:[{“匹配”:{“状态”:“活动”}},{“匹配”:{“is_published”:true}},{“匹配”:{“payed”:true}},{“match”:{“adverse_type”:“sell”}}]}},“排序”:[{“updated_at”:{“order”:“desc”}

  • 我需要在我的应用程序中添加搜索栏。搜索将按名和姓进行搜索。我不知道如何编写elastcsearch查询。名字和姓氏是两个分开的字段。我是个新手。 例:名:约翰,姓:约书亚 搜索栏字符串为上层结果:约翰·乔·约翰·乔·约翰·乔·乔·约翰·约书亚·约翰·约书亚·乔...

  • 如何获取搜索查询匹配的文档中的所有字段?关于<code>字段</code>的ES文档指出,使用<code>*</code>,可以获得所有字段:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-fields.html 有了这个文档和这个查询,我得到了结果,但没有返回任何字段: 放置

  • 我阅读了一些关于查询上下文和过滤上下文的文章和文档,了解到如果你不需要进行全文搜索或评分,最好使用过滤上下文。就我而言,我想返回包含ID的日志……所以我意识到我应该只使用过滤上下文而不是查询上下文。除了全文搜索或评分之外,是否有一条硬基线来定义何时应该使用其中一个? 所以我从我最初的DSL查询搜索cmd: 到过滤器上下文: 因为,我想使用NEST来执行我采用这种方法的查询搜索。 这是使用NEST进

  • 我有一个endpoint,我正在将它代理到ElasticSearchAPI中,以进行简单的用户搜索。 有关这些参数的一些详细信息如下 所有参数都是可选的 昵称可以作为全文搜索进行搜索(即'myUser'将返回'myUsername') 电子邮件必须完全匹配 名称可以搜索为每个令牌的全文搜索(即'john'将返回'John Smith') ElasticSearch调用应将参数集体视为AND'd。

  • 我正在对elasticsearch(1.7)进行常规搜索,使用对许多指定字段的匹配查询。这是在一个java应用程序中完成的,只有一个框可以输入搜索项。允许各种搜索选项(例如,用引号包围短语来查找阶段,而不是成分词)。这意味着我正在进行全面的测试搜索。 一切都很好,除了我的帐户裁判有正斜杠在他们和一个帐户裁判的搜索产生成千上万的结果。如果我用引号包围帐户引用,我就得到了我想要的结果。我假设AC/12