ElasticSearch多词搜索json

时间:2019-05-14 15:54:43

标签: json elasticsearch

Db中有很多项目,其中有很多列。我需要搜索这些列中的两个以获取一个数据集。 第一列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
            ]
          }
        }
      ]
    }
  }
}

我得到并清空结果集。如果删除"terms"中的任何一个,我都会得到期望的结果。因此,我只需要将这些术语组合到一个搜索中即可。

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

假设我是Jelly Belly,我想用所有的《星球大战》和迪斯尼果冻豆制作一袋果冻豆,我还想添加所有绿色的豆子。基本上,这就是我想要做的。

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

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

locationId以一种重要的方式分隔了我们的数据。

我发现了这篇文章:elasticsearch bool query combine must with OR 它使我离我越来越近,但并非一直到那里……

我已经尝试了几次迭代should> must> must>必须建立此查询并获得不同的结果,但是没有准确的结果。

1 个答案:

答案 0 :(得分:0)

这是正在运行的查询。当我意识到我为我的一个参数传递了错误的数据时,它会有所帮助。 doh

should内的must嵌套在@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
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}