gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:23:40 25 4
gpt4 key购买 nike

我正在尝试基于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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com