我一直在面对多字段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/