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

ElasticSearch多项搜索json

刘建中
2023-03-14

我在一个数据库中有很多项,有很多列。我需要在其中的两个列中搜索以获得一个数据集。第一列genericcode将把具有该代码的任何行分组在一起。第二列genericid调用要添加的特定行,因为它缺少我要查找的genericcode的列表。

后端C#为我设置了json,如下所示,但它什么也不返回。

{
  "from": 0,
  "size": 50,
  "aggs": {
    "paramA": {
      "nested": {
        "path": "paramA"
      },
      "aggs": {
        "names": {
          "terms": {
            "field": "paramA.name",
            "size": 10
          },
          "aggs": {
            "specValues": {
              "terms": {
                "field": "paramA.value",
                "size": 10
              }
            }
          }
        }
      }
    }
  },
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "locationId": {
              "value": 1
            }
          }
        },
        {
          "terms": {
            "genericCode": [
              "10A",
              "20B"
            ]
          }
        },
        {
          "terms": {
            "genericId": [
              11223344
            ]
          }
        }
      ]
    }
  }
}

我得到和空的结果集。如果我删除“术语”中的任何一个,我就会得到我所期望的结果。所以,我只需要将这些术语合并到一个搜索中。

我在这里浏览了大量文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html,但似乎仍然找不到我要找的东西。

假设我是果冻肚子,我想用所有星球大战和迪斯尼的果冻豆创建一袋果冻豆,我还想添加所有绿色的豆子。这基本上就是我想做的。

编辑:将“must”更改为“should”也不太正确。我需要它(在伪sql中):

SELECT *
FROM myTable
Where locationId = 1
AND (
  genericCode = "this", "that
  OR
  genericId = 1234, 5678
  )

locationid以一种重要的方式分隔数据。

我尝试了几次构建这个查询的Washing>must>Washing>must迭代,得到了不同的结果,但都不准确。

共有1个答案

爱刚捷
2023-03-14

下面是正在工作的查询。当我意识到我为我的一个参数传递了错误的数据时,它帮助了我。DOH

正如@Khachik在上面的注释中指出的那样,将应该嵌套在必须中。我以前有过这个,但由于上面的错误,它不起作用。

{
  "from": 0,
  "size": 10,
  "aggs": {
    "specs": {
      "nested": {
        "path": "paramA"
      },
      "aggs": {
        "names": {
          "terms": {
            "field": "paramA.name",
            "size": 10
          },
          "aggs": {
            "specValues": {
              "terms": {
                "field": "paramA.value",
                "size": 10
              }
            }
          }
        }
      }
    }
  },
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "locationId": {
              "value": 1
            }
          }
        },
        {
          "bool": {
            "should": [
              {
                "terms": {
                  "genericCode": [
                    "101",
                    "102"
                  ]
                }
              },
              {
                "terms": {
                  "genericId": [
                    3078711,
                    3119430
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}
 类似资料:
  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 问题内容: 我曾经使用过django,haystack和elasticsearch。 我的search_index.py: 搜索表格: 模板: 看 ` 我得到所有的价值,那里有“老板”和“挡泥板” 当您在搜索框中输入“ boss fender”时,我没有结果。从搜索表单中,我只能得到一个单词的结果,例如“老板”。如何使搜索多个单词的能力? 问题答案: 这个月我陷入了这个问题。 为了执行正确的查询,

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

  • 主要内容:多索引此API用于在Elasticsearch中搜索内容。 用户可以通过发送具有查询字符串的获取请求作为参数或在请求的消息正文中的查询来进行搜索。所有的搜索API都是多索引,多类型。 多索引 Elasticsearch允许我们搜索存在于所有索引或一些特定索引中的文档。 例如,如果我们需要搜索名称包含的所有文档。 响应 或者,同样地我们可以在,索引中搜索 - 多类型 还可以在所有类型或某种指定类型的索引中

  • 问题内容: 我有一个用例,其中在同一索引中有两种不同的类型。两种类型都有不同的结构和映射。 我需要使用不同的查询DSL同时查询这两种类型。 如何构建查询DSL以同时查询多个相同索引类型。 我在https://www.elastic.co/guide/en/elasticsearch/guide/current/multi-index- multi- type.html上 查看了Elasticsea

  • 我们有一个需要跨多个索引查询的要求,如下所示 我们使用的是ElasticSearch 5.1.1. http://localhost:9200/index1,index2,index3/type1,type2/_search 查询: 但是,我们可能无法预先知道该索引是否存在,如果上述任何一个索引都不存在,我们将得到以下错误。 一个明显的方法是检查索引是否已经存在,但我希望避免额外的调用。 注意:至