elasticsearch - elasticsearch多字段查询未按预期工作

标签 elasticsearch logstash

我一直在面对多字段Elasticsearch查询的一些问题。我正在尝试将与func_name字段匹配的所有文档查询为两个硬编码字符串,即使我的索引中的文档都包含这两个函数名,但是查询结果始终只获取一个func_name。到目前为止,我已经尝试了以下查询。

1)即使文档也具有其他功能,Following也仅返回一个功能匹配项

GET /_search
{
  "query": {
    "multi_match": {
      "query": "FEM_DS_GetTunerStatusInfo MDM_TunerStatusPrint",
      "operator": "OR",
      "fields": [
        "func_name"
      ]
    }
  }
}

2)间歇性地执行以下两个功能。
GET /_search
{
    "query": {
        "match": {
            "func_name": {      
                "query":    "MDM_TunerStatusPrint FEM_DS_GetTunerStatusInfo",
                "operator": "or"
            }
        }
    }
}

3)即使文档也具有其他功能,Following也仅返回一个功能匹配项
{
  "query": {
    "bool": {
      "should": [
                  { "match": { "func_name": "FEM_DS_GetTunerStatusInfo" }},
                  { "match": { "func_name": "MDM_TunerStatusPrint"   }}
      ]
    }
  }
}

任何帮助深表感谢。

感谢您的回复。假设我在elasticsearch中有以下类型的文档。我希望我的搜索返回所有匹配我的func_name的头两个文档。
{
    "_index": "diag-178999",
    "_source": {
      "severity": "MIL",
      "t_id": "03468500",
      "p_id": "000007c6",
      "func_name": "MDM_TunerStatusPrint",
      "timestamp": "2017-06-01T02:04:51.000Z"
    }
  },
  {
    "_index": "diag-344563",
    "_source": {
      "t_id": "03468500",
      "p_id": "000007c6",
      "func_name": "FEM_DS_GetTunerStatusInfo",
      "timestamp": "2017-07-20T02:04:51.000Z"
    }
  },
  {
    "_index": "diag-101010",
    "_source": {
      "severity": "MIL",
      "t_id": "03468500",
      "p_id": "000007c6",
      "func_name": "some_func",
      "timestamp": "2017-09-15T02:04:51.000Z"
    }

最佳答案

请求ES的“两种最佳方法”是按特定字段上的术语进行过滤或汇总查询,以便您可以重命名该字段,应用多个规则并为响应提供更易理解的格式

参见:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html和另一个文档页面在这里,非常有用:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html

就您而言,您应该:

    {
      "from" : 0, "size" : 2,
      "query": {
          "filter": {
            "bool": {
              "must": {
                "term": {
                  "func_name" : "FEM_DS_GetTunerStatusInfo OR MDM_TunerStatusPrint",
                }
              }
            }
          }
    }
}

OR 
    	"aggs": {
               "aggregationName": {
                     "terms": {
    		     "func_name" : "FEM_DS_GetTunerStatusInfo OR MDM_TunerStatusPrint"
    		   }
              }
            }
        }


最后的汇总只是在这里向您展示如何执行与查询过滤器相同的操作。让我知道它是否有效:)

最好的祝福

关于elasticsearch - elasticsearch多字段查询未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46386666/

相关文章:

Elasticsearch 没有首先返回完全匹配

elasticsearch - Logstash - 使用当前日期作为时间戳日期

elasticsearch - 如何使用logstash在elasticsearch中使用java堆栈跟踪?

elasticsearch - 当Logstash的elasticsearch输出插件记录错误时,在Prometheus中引发警报

logstash - 如何执行Logstash配置的单元测试或集成测试?

使用 kubernetes 的 Elasticsearch 多节点集群?

elasticsearch - 在ElasticSearch上按距离排序

elasticsearch - ElasticSearch-无法获取映射

node.js - Elasticsearch Node Client在索引别名上使用mget带回不在别名中的文档

ruby-on-rails-3 - 使用Tyre和Elastic Search在模型的关联记录值更改时为 Elasticsearch 索引建立Delta索引