多匹配查询,用术语查找搜索多个索引Elasticsearch 6.x



all, 我正在构建一个嵌套6.x查询,该查询符合塞拉克语术语,并在不同指数的不同字段中查看。 这是我到目前为止得到的,但没有返回我期望的任何结果。

请参阅下面的详细信息

使用的索引

  1. dev-sample-search
  2. 用户代理搜索

搜索的工作方式如下。

  1. 查询字段中的值( 27921093 )被搜索字段 agentNumber,customErname,filenumber,documentID (这些都是 分析的文件)。

  2. 搜索应将文档限制为 AgentNumbers 用户 sampleuser@gmail.com 可以访问(示例数据 在下面添加了用户代理搜索)。

  3. agentNumber,customName,filenumber,documentid 和状态是索引dev-sample-search的一部分。

  4. 状态字段定义为关键字

  5. user-Adent-Search 索引中的字段全部关键字

    示例用户代理 - 搜索索引数据:

     {
                  "id": "sampleuser@gmail.com"",
                  "user": "sampleuser@gmail.com"",
                  "agentNumber": [
                    "123.456.789",
                    "1011.12.13.14"
                  ]
        }
    

示例Dev-Sample-Search索引数据:

{
          "agentNumber": "123.456.789",          
          "customerName": "Bank of america",
          "fileNumber":"test_file_1123",
          "documentid":"1234456789"
 }
GET dev-sample-search/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "type": "best_fields",
            "query": "27921093",
            "operator": "and",
            "fields": [
              "agentNumber",
              "customerName",
              "fileNumber",              
              "documentid^10"
            ]
          }
        }
      ],
      "filter": [
        {
          "bool": {
            "must": [
              {
                "terms": {
                  "agentNumber": {
                    "index": "user-agents-search",
                    "type": "_doc",
                    "user": "sampleuser@gmail.com",
                    "path": "agentNumber"
                  }
                }
              },
              {
                "bool": {
                  "must_not": [
                    {
                      "terms": {
                        "status": {
                          "value": "pending"
                        }
                      }
                    },
                    {
                      "term": {
                        "status": {
                          "value": "cancelled"
                        }
                      }
                    },
                    {
                      "term": {
                        "status": {
                          "value": "app cancelled"
                        }
                      }
                    }
                  ],
                  "should": [
                    {
                      "term": {
                        "status": {
                          "value": "active"
                        }
                      }
                    },
                    {
                      "term": {
                        "status": {
                          "value": "terminated"
                        }
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

我看到了您可能想看的几件事:

  1. terms查找查询中,"user": "sampleuser@gmail.com",应为"id": "sampleuser@gmail.com",
  2. 如果filter子句中的至少一个should子句应匹配,请在包含should子句的bool查询上设置"minimum_should_match" : 1

相关内容

  • 没有找到相关文章