elasticsearch - 部分符合 Elasticsearch 查询的要求

标签 elasticsearch dsl

我正在尝试基于2个条件从elasticsearch检索数据,它应该匹配jarFileName和dependentClassName。查询可以通过jarFileName很好地运行,但可以部分匹配DependendentClassName。

这是我使用的查询。

{
"query": {
"bool": {
  "must": [
    {
      "match": {
        "dependencies.dependedntClass": "java/lang/String"
      }
    },
    {
      "match": {
        "JarFileName": {
          "query": "Client.jar"
         }
       }
     }
     ]
   }
  }
}

查询完全匹配jarFileName,但对于dependentClassName,它甚至匹配并返回所提及值的任何部分。例如,如果我使用java / lang / String,它将返回在其dependentClassName中具有java或lang或String的任何类型。我认为是因为“/”。我该如何纠正呢?

编辑

我使用此查询进行映射,
{
"classdata": {
"properties": {
  "dependencies": {
    "type": "object",
    "properties": {
      "dependedntClass": {
        "type": "string",
        "index": "not_analyzed"
      }
     }
    }
   }
  }
}

最佳答案

您可以将dependencies.dependedntClass的索引设置为not_analyzed,以便不会使用standard analyzer分析给定的字符串。如果您使用的是ES 2.x,则下面的映射应该可以正常工作。

PUT /your_index
{
    "mappings": {
        "your_type":{
            "properties": {
                "dependencies":{
                    "type": "string",
                    "fields": {
                        "dependedntClass":{
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}

然后,您的查询也应该正常工作。

编辑(如果dependencies字段为nested类型)

如果您的dependencies字段是nested或数组类型,则按如下所示更改映射:
POST /your_index
{
    "mappings": {
        "your_type":{
            "properties": {
                "dependencies":{
                    "type": "nested",
                    "properties": {
                        "dependedntClass":{
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}

并且查询应如下更改:
GET /your_index/_search
{
    "query": {
        "bool": {
          "must": [
            {
              "nested": {
                   "path": "dependencies",
                   "query": {
                       "match": {
                          "dependencies.dependedntClass": "java/lang/String"
                       }
                   }
                }
            },
            {
              "match": {
                "JarFileName": {
                  "query": "Client.jar"
                }
              }
            }
          ]
        }
    }
}

关于elasticsearch - 部分符合 Elasticsearch 查询的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45656561/

相关文章:

java - xtext,修改大纲树字符串

android - 添加解析 UI 小部件但未找到 Gradle DSL 方法 : compile()

elasticsearch - 使用 URL 根据 Kibana Dashboard 中的某些字段过滤数据

python-3.x - 如何防止Elasticsearch仅对具有multi_match的一个非英语字符进行匹配

docker - Janusgraph docker通过docker net连接到cassandra docker和elasticsearch docker,并将8182暴露给主机?

dsl - 我可以从 Karate html 报告中删除 docString 吗?

elasticsearch - 使用分析器的Elasticsearch多字,多字段搜索

elasticsearch - 日志,度量标准和分析数据都应归入一个数据湖还是应单独存储?

c# - 帮助学习使用 Irony for .net

c - 在 C 语言中解析 DSL 比 lex/yacc 更好的解决方案?